有点像dp,30pts
查看原帖
有点像dp,30pts
780774
iqiqiqiqiqiqiqiq楼主2024/3/19 21:02
#include<bits/stdc++.h>
using namespace std;
struct mod{
	int t[21],m[21],a=1;
	bool making=false;
};
struct mac{
	int d=0;
};
int n,k,p[402][2],sec,pn,pb;
mod id[21];
mac mid[21];
int c[21];
void make(){
    for(int i=1;i<=pn;i++){
		if(mid[id[p[i][0]].m[p[i][1]]].d==0&&p[i][1]==id[p[i][0]].a&&!id[p[i][0]].making){
			mid[id[p[i][0]].m[p[i][1]]].d=p[i][0];id[p[i][0]].making=true;
		}
	}for(int i=1;i<=n;i++){
		if(mid[i].d){
			id[mid[i].d].t[id[mid[i].d].a]--;
			if(id[mid[i].d].t[id[mid[i].d].a]==0){
				id[mid[i].d].a++;
				id[mid[i].d].making=false;
				mid[i].d=0;
			}
		}
	}for(int i=1;i<=pn;i++){
		if(id[p[i][0]].a>p[i][1]){
			for(int j=i;j<=pn;j++){
				p[j][0]=p[j+1][0];
				p[j][1]=p[j+1][1];
			}pn--;
		}
	}
}
int main(){
    cin>>n>>k;
    pn=n*k;
    for(int i=1;i<=n*k;i++){
        cin>>p[i][0];
        c[p[i][0]]++;
        p[i][1]=c[p[i][0]];
    }for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++){
            cin>>id[i].m[j];
        }
    }for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++){
            cin>>id[i].t[j];
        }
    }while(pn>0){
        make();
        sec++;
    }cout<<sec;
    return 0;
}

求助,其中t是储存零件加工时间,sec是时间,m是用的机器,a是加工到哪里,pb好像是没有用的(忘了),p是计划,pn是计划数量

2024/3/19 21:02
加载中...