Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
150970 lrf820215 加工生产调度 C++ 解答错误 33 0 MS 288 KB 1526 2024-06-10 10:34:37

Tests(4/12):


#include<bits/stdc++.h> using namespace std; const int maxn=1e4+10; struct Node{ int time, index;//工件i在A,B上最短加工时间和序号i }job[maxn]; bool cmp(Node &a, Node &b){ return a.time < b.time;//按最短时间排序 } int a[maxn], b[maxn], n; int ans[maxn];//最佳调度顺序 int main(){ cin>>n; for(int i=1;i<=n;i++){ job[i].index=i;//序号 cin>>a[i];//在A上加工的时间 } for(int i=1;i<=n;i++){ cin>>b[i];//在B上加工的时间 job[i].time=min(a[i],b[i]);//获取A和B上加工的最短时间 } sort(job+1,job+n+1,cmp);//按时间排序 int x=1,y=n; for(int i=1;i<=n;i++){ if(job[i].time==a[job[i].index]){//如果在A的时间更短 ans[x++]=job[i].index;//A时间短的往前面塞 }else{ ans[y--]=job[i].index;//B时间段的往后面塞 } } //记住,ans里存的是下标 int fa=a[ans[1]];//fa为i在车间A加工完需要的时间 int fb=fa+b[ans[1]];//fb为i在车间B加工完需要的时间 for(int i=2;i<=n;i++){ //i开始在车间B加工时需要满足两个条件: //一个是i在A加工完成,另一个是i-1在B加工完成 //看看谁最晚,有一个没好的话,i都没法在车间B加工。 fb=max(fa+a[ans[i]],fb)+b[ans[i]]; fa+=a[ans[i]]; } cout<<fb<<endl;//加工总时长 for(int i=1;i<=n;i++)cout<<ans[i]<<' '; return 0; }


测评信息: