/*按照给的安排顺序,找到一个要插入的工件
找到这个工件当前要操作的工序
找到这个工序要插在那个机器上
找到这个工序需要花费时间
找到这个工序当前能开始的最早的时间
在当前机器上从左往右扫,找到一个能放这个工序的空位
*/
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct gongjian{
int jqh;//编号
int sj;//时间
}gj_sx[20][20];//用结构体去存工件因为工件有两道工序所以用二维数组
int gj_gx[20],gj_last[20],apsx[400];
int jq_sj[20][8000];
bool judge(int bgtime,int endtime,int jqh){
for(int i=bgtime;i<=endtime;i++){
if(jq_sj[jqh][i]==1) return false;
}
return true;
}
void chuli(){
for(int i=0;i<m*n;i++){
int gj=apsx[i];
int gx=gj_gx[gj]++;
int jqh=gj_sx[gj][gx].jqh;
int sj=gj_sx[gj][gx].sj;
int bgtime=gj_last[gj];
while(true){
if(judge(bgtime+1,bgtime+sj,jqh)){
for(int j=bgtime+1;j<=bgtime+sj;j++){
jq_sj[jqh][j]=1;
}
gj_last[gj]=bgtime+sj;
break;
}
bgtime++;
}
}
}
int main(){
cin>>m>>n;
for(int i=0;i<m*n;i++){
cin>>apsx[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>gj_sx[i][j].jqh;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>gj_sx[i][j].sj ;
}
}
for(int i=1;i<=n;i++)gj_gx[i]=1;
chuli();
int max=gj_last[1];
for(int i=1;i<=n;i++){
if(max<gj_last[i])max=gj_last[i];
}
cout<<max;
}
1065
最新推荐文章于 2024-10-31 19:07:52 发布