怎么会输出7220?
#include<iostream>
using namespace std;
int worklist[500],worknumber[30][30],worktime[30][30]; //输入数组
int stepcnt[30],ans[30]; bool timepoint[500][500]; //辅助数组
int m,n; //输入变量
inline bool check(int begin,int end,int work) /*起始时间点,最终时间点,工作序号 */
{ //进入函数
for(int time=begin;time<=end;time++) //扫描时间点
if(timepoint[work][time]!=0) //若该时间点被占用
return 0; //该时间段不符合条件,退出。
return 1; //若可以,返回1。
}
inline void input() //输入函数,使程序整洁。
{
cin>>m>>n;
for(int i=1;i<=m*n;i++) cin>>worklist[i]; //输入顺序
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
cin>>worknumber[i][j]; //输入机器号
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
cin>>worktime[i][j]; //输入每个工序每个机器号所对应的用时
}
int main()
{
input(); //调用函数
for(int i=1;i<=n*m;i++) //本代码核心部分
{
int tmp=worklist[i]; //赋值,一步一步来
stepcnt[tmp]++; //该工序将被执行,工序数+1。
int nnum=worknumber[tmp][stepcnt[tmp]], //记录机器号
ntime=worktime[tmp][stepcnt[tmp]]; //记录用时
for(int time=ans[tmp]+1; ;time++) //时间段遍历
if(check(time,time+ntime-1,nnum)==1) //若时间段符合要求
{
for(int j=time;j<time+ntime;j++)
timepoint[nnum][j]=1; //将时间点标记
ans[tmp]=time+ntime-1;
break; //找到的第一个时间段一定是最优的。
}
}
int a=0;
for(int i=1;i<=n;i++) a=max(a,ans[i]); //取用时最多的时间
cout<<a; //输出
return 0;
}