#include<bits/stdc++.h> struct Str { int w; int num; }; int n; int a[1010], b[1010]; Str s[5000]; int u, v; int ans[1010]; bool cmp(Str x, Str y) { return x.w < y.w; } int main(void) { scanf("%d", &n); for(int k = 1;k <= n;k ++) scanf("%d", &a[k]); for(int k = 1;k <= n;k ++) scanf("%d", &b[k]); //读入 for(int k = 1;k <= n;k ++) s[k].w = std::min(a[k], b[k]), s[k].num = k; std :: sort(s+1, s+n+1, cmp); //结构体存储,s[k].w表示用的时间. s[k].num 表示其序号 u = 0, v = n+1; for(int k = 1;k <= n;k ++) if(s[k].w == a[s[k].num]) ans[++ u] = s[k].num; else ans[-- v] = s[k].num; //核心代码。也是我们刚刚讨论的算法的关键所在 //ans数组存放的就是我们的最终处理序列 u = 0, v = 0; for(int k = 1;k <= n;k ++) { u += a[ans[k]]; if(v < u) v = u; v += b[ans[k]]; } //统计用时.这里u表示a机器用时,v表示b机器用时,且每次v都被置为最大值. printf("%d\n", v); for(int k = 1;k <= n;k ++) printf("%d ", ans[k]); //输出 return 0; }