考虑 \(i\) 排在 \(j\) 前的条件是 \(a_i+\max(a_j,b_i)+b_j\le a_j+\max(a_i,b_j)+b_i\),然后发现这一坨东西是皇后游戏中的倒数第三个式子,直接转化为 \(\min(a_j,b_i)\ge\min(a_i,b_j)\),然后就按皇后游戏中的排序方法就可以了……
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
struct hand{int a,b,id;
}peo[1005];
int d(hand x){if(x.a==x.b) return 0;return ((x.a>x.b)?1:-1);
}int cmp(hand x,hand y){if(d(x)!=d(y)) return d(x)<d(y);if(d(x)>0) return x.b>y.b;return x.a<y.a;
}signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++) cin>>peo[i].a;for(int i=1;i<=n;i++)cin>>peo[i].b,peo[i].id=i;sort(peo+1,peo+n+1,cmp);int s=0,c=0;for(int i=1;i<=n;i++){s+=peo[i].a;c=max(c,s)+peo[i].b;}cout<<c<<"\n";for(int i=1;i<=n;i++)cout<<peo[i].id<<" ";return 0;
}