只过了1,2,3啊,感觉没错,感觉思路错了,附上全注释,求调
查看原帖
只过了1,2,3啊,感觉没错,感觉思路错了,附上全注释,求调
704679
mrHCT楼主2023/4/8 17:38
#include<iostream>
using namespace std;
struct pen
{
    int jiqi[400];//记录工件的工序的机器号
    int time[400];//记录工件的工序的所用时间
    int lasttime;//此工件此时末尾的时间
    int flag=1;//记录用到那个工序了
}p[10000];
int m,n;
int zhu[10000];
int  match[25][400000];//时间轴
int main()
{
    cin>>m>>n;
    for(int i=1;i<=m*n;i++)cin>>zhu[i];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    cin>>p[i].jiqi[j];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    cin>>p[i].time[j];
    for(int w=1;w<=m*n;w++)//给出的顺序
    {
        int i=zhu[w];
        int matchnow=p[i].jiqi[p[i].flag];//取当前用到的机器号
        int timenow=p[i].time[p[i].flag];//当前工序用到的时间
       // cout<<i<<" "<<matchnow<<" "<<timenow;
       // cout<<endl;
        p[i].flag++;
        int j=p[i].lasttime+1;//取上一次这一工件的最后的完成时间
        while(match[matchnow][j]!=0)//从最后一次完成开始,找到空闲时间
        j++;
        for(int k=j;k<j+timenow;k++)match[matchnow][k]=i;
        p[i].lasttime=j+timenow-1;
    }
    int maxi=0;
    for(int i=1;i<=n;i++)maxi=max(maxi,p[i].lasttime);
    
    cout<<maxi;
    
    
    return 0;
}

2023/4/8 17:38
加载中...