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
",ans);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/WHFF521/p/11650138.html