【題目描述】
某工廠收到了 nn 個產品的訂單,這 nn 個產品分別在 A、B 兩個車間加工,並且必須先在 A 車間加工後纔可以到 B 車間加工。
某個產品 ii 在 A,B 兩車間加工的時間分別爲Ai,BiAi,Bi。怎樣安排這 nn 個產品的加工順序,才能使總的加工時間最短。
這裏所說的加工時間是指:從開始加工第一個產品到最後所有的產品都已在 A,B 兩車間加工完畢的時間。
【輸入】
第一行僅—個數據 nn ,表示產品的數量;
接下來 nn 個數據是表示這 nn 個產品在 A 車間加工各自所要的時間;
最後的 nn 個數據是表示這 nn 個產品在 B 車間加工各自所要的時間。
【輸出】
第一行一個數據,表示最少的加工時間;
第二行是一種最小加工時間的加工順序。
【輸入樣例】
5 3 5 8 7 10 6 2 1 4 9
【輸出樣例】
34 1 5 4 2 3
【提示】
對於100%的數據, 0 < n < 10000,所有數值皆爲整數。
//#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
#define debug(a) cout<<"*"<<a<<"*"<<endl
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//#define s first
//#define e second
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<double,double> Pair;
const int inf=0x3f3f3f3f;
const int N=1e4+5;
int n,m,t;
int i,j,k;
int a[N],b[N],minn[N],pos[N],ans[N];
int main()
{
IOS;
while(cin>>n){
for(i=0;i<n;i++) cin>>a[i];
for(i=0;i<n;i++){
cin>>b[i];
minn[i]=min(b[i],a[i]);
pos[i]=i;
}
for(i=0;i<=n-2;i++){
for(j=i+1;j<n;j++){
if(minn[i]>minn[j]){
swap(minn[i],minn[j]);
swap(pos[i],pos[j]);
}
}
}
int head=0,tail=n-1;
for(i=0;i<n;i++){
if(minn[i]==a[pos[i]]){
ans[head++]=pos[i];
}
else{
ans[tail--]=pos[i];
}
}
int ta=0,tb=0;
for(i=0;i<n;i++){
ta+=a[ans[i]];
if(ta>tb) tb=ta;
tb+=b[ans[i]];
}
cout<<tb<<endl;
for(i=0;i<n;i++) cout<<ans[i]+1<<" ";
cout<<endl; break;
}
return 0;
}