提交时间:2024-03-02 15:09:17
运行 ID: 134198
#include<bits/stdc++.h> using namespace std; int n,c[10003],d[10003],Worktime[10002]; struct node{ int m,num; }a[10002]; bool cmp(node a,node b){ return a.m<b.m; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&c[i]); for(int i=1;i<=n;i++){ scanf("%d",&d[i]); a[i].m=min(c[i],d[i]); a[i].num=i; } sort(a+1,a+1+n,cmp); //排序 int l=0,r=n+1; for(int i=1;i<=n;i++){ if(a[i].m==c[a[i].num]) Worktime[++l]=a[i].num; //按上述方法排出最小加工时间的加工顺序 else Worktime[--r]=a[i].num; //注意这里一定要写else,不然只有40分 } int TA=0,TB=0; //TA:A厂的加工时间 TB:B厂的加工时间 for(int i=1;i<=n;i++){ //按照最小加工时间的加工顺序算出在A,B厂最少的加工时间 TA+=c[Worktime[i]]; if(TA>TB) TB=TA; TB+=d[Worktime[i]]; } printf("%d\n",TB); //因为必须先在A车间加工后才可以到B车间加工,所以TA>TB for(int i=1;i<=n;i++) printf("%d ",Worktime[i]); return 0; }