99分求助!!
查看原帖
99分求助!!
334099
陈雨霁楼主2021/1/10 18:35
#include<bits/stdc++.h>
using namespace std;
int a[500],b[30][30],c[30][30],gx[30];
//a用于存储元件处理的系列, 
int lasttime[100000];
bool timeline[2500][2500]; 

bool check(int x,int y,int id){
 for(int i=x;i<=y;i++)
  if (timeline[id][i]) 
   return false;
 return true;
}

int main() {
	 int m,n,idnum,timenum,nown;
	 cin>>m>>n;
	 for(int i=1;i<=m*n;i++) 
		cin>>a[i];    //读取加工顺序 
	 for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>b[i][j];  //读取相应工序需要使用的机器号
	 for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
	  		cin>>c[i][j];  //读取每个工序需要使用机器的时间


	 for(int i=1;i<=m*n;i++){
	  nown=a[i];    //当前需要进入排序的元件编号 
	  gx[nown]++;    //当前进行处理的元件需要使用的机器序号 
	  idnum=b[nown][gx[nown]];   //找到当前处理的元件需要使用的加工机器的序号 
	  timenum=c[nown][gx[nown]];  //获得那个元件,第几道工序,需要使用那个机器
	          //需要多少时间
	  //需要对时间轴进行扫描
	  
	  //cout<<i<<" *** "<<nown<<"  "<<gx[nown]<<"  "<<idnum<<"  "<<timenum<<endl; 
	  for(int t=lasttime[nown]+1;;t++)         //开始的位置应当是当前原件已经使用掉的时间,而不是时间轴使用到的时间
		  							     	//时间轴使用的时间通过布尔型数组去记录,而原件使用的时间通过lasttime 去记录 
	   if(check(t,t+timenum-1,idnum)){
	    for(int tt=t;tt<=t+timenum-1;tt++) 
	    	timeline[idnum][tt]=true;
	    lasttime[nown]=t+timenum-1;
	    break;
	   }
	  //cout<<i<<"  :  "<<nown<<"  "<<gx[nown]<<"  "<<idnum<<"  "<<timenum<<"  "<<lasttime[nown]<<endl; 
	 }
	int maxn=0;
	for(int i=1;i<=n;i++)	//cout<<lasttime[i]<<"  ";	从n个原件当中去找到最大值 
		if(maxn<lasttime[i]) maxn=lasttime[i];
	cout<<maxn;     
    return 0;
}
2021/1/10 18:35
加载中...