堆栈溢出?求助
查看原帖
堆栈溢出?求助
193714
司马韵兮楼主2020/11/28 10:58
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=21;
int m,n,ans,cnt;//cnt有多少机器被占用 
int a[maxn],b[maxn][maxn],c[maxn][maxn];//b机器 c时间 
int d[maxn],e[maxn],f[maxn];//d机器进程 e工件步骤 f机器对应工件 
bool v[maxn];//v哪个工件在加工 
int main()
{
	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];
		}
	}
	memset(e,1,sizeof(e));
	ans=m*n;
	for(int i=1;;i++)
	{
		for(int j=1;j<=m*n;j++)
		{
			if(cnt==m) break;
			if(d[b[a[j]][e[a[j]]]]||!a[j]||v[a[j]]) continue; //以进行过或机器被占 
			cnt++;
			e[a[j]]++;
			d[b[a[j]][e[a[j]]]]=c[a[j]][e[a[j]]];
			f[b[a[j]][e[a[j]]]]=a[j];
			v[a[j]]=true;
		}
		for(int j=1;j<=m;j++)
		{
			if(!d[j]) continue;
			d[j]--;
			if(!d[j])
			{
				cnt--;
				ans--;
				v[f[j]]=false;
			}
		}
		if(!ans)
		{
			cout<<i<<endl;
			break;
		}
	}
	return 0;
}
2020/11/28 10:58
加载中...