P1065 作业调度方案――小模怡情,大模伤身

匿名 (未验证) 提交于 2019-12-03 00:14:01

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; }
View Code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!