提交时间:2024-03-02 13:04:48

运行 ID: 134066

#include <iostream> #include <fstream> #include <algorithm> using namespace std; const int N=50; class Job { public: int index, time; bool M; }; bool cmp(Job a,Job b){ return a.time<b.time; } int* Johnson(int n,int a[],int b[],int best[]){ int i,j,k,t; Job *Min =new Job[n]; for(i=0;i<n;i++){ if(a[i]<b[i]){ Min[i].M =true; Min[i].time =a[i]; } else{ Min[i].M=false; Min[i].time=b[i]; } Min[i].index=i; } sort(Min, Min+n, cmp); j=0,k=n-1; for(i=0;i<n;i++){ if(Min[i].M ==true) best[j++]=Min[i].index; else best[k--]=Min[i].index; } t=a[best[0]]; k=t+b[best[0]]; for(j=1;j<n;j++){ t=t+a[best[j]]; k= t<k ? k+b[best[j]] : t+b[best[j]]; } best[i+1]=k; delete Min; return best; } int main() { int i,n,a[N],b[N],best[N]; cin>>n; for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<n;i++) cin>>b[i]; Johnson(n,a,b,best); cout<<best[i+1]<<'\n'; for(i=0;i<n;i++) { cout<<best[i]+1<<" "; } cout<<endl; return 0; }