P1065 作业调度方案——小模怡情,大模伤身
P1065 作业调度方案
一个有点费手的“小”%%拟;
题都差点没读明白……;
每个机器所能完成的工序是不一样的;
每个物品完成工序的机器是指定的;
按照题面说的按时间轴推下去就行了;
没有时间上界有点难受……
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=500; int m,n; int work_list[maxn]; int list_order[maxn]; int order_mach[maxn][maxn]; int work_time[maxn][maxn]; int last_time[maxn]; bool mach_sleep[maxn][maxn*100]; bool check(int t,int cos,int id) { for(int i=t;i<=t+cos-1;i++) { if(!mach_sleep[id][i]) return 0; } for(int i=t;i<=t+cos-1;i++) mach_sleep[id][i]=0; return 1; } int main() { scanf("%d%d",&m,&n); for(int i=1;i<=n*m;i++)scanf("%d",&work_list[i]); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%d",&order_mach[i][j]); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%d",&work_time[i][j]); memset(mach_sleep,1,sizeof(mach_sleep)); for(int i=1;i<=n*m;i++) { list_order[work_list[i]]++; int now_mach=order_mach[work_list[i]][list_order[work_list[i]]]; int spend_time=work_time[work_list[i]][list_order[work_list[i]]]; for(int j=last_time[work_list[i]]+1;;j++) { if(check(j,spend_time,now_ma`ch)) { last_time[work_list[i]]=j+spend_time-1; break; } } } int ans=0; for(int i=1;i<=n;i++) { ans=max(ans,last_time[i]); } printf("%d\n",ans); return 0; }