#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace Testify{
inline int read(){
int f(1),x(0);
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
return f*x;
}
inline void WritE(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) WritE(x/10);
putchar(x%10+48);
}
inline void write(int x){
WritE(x);
puts("");
}
inline void Write(int x){
WritE(x);
putchar(' ');
}
}
using namespace Testify;
int n;
const int N=1e3+5;
int a[N],b[N],now[N];
int ans,Ans[N];
inline int energy(){
int A=0,B=0;
for(register int i=1;i<=n;i++){
A+=a[i];
if(i==1){
B+=a[now[i]]+b[now[i]];
continue;
}
if(A>=B){
B=A+b[now[i]];
}
else{
B+=b[now[i]];
}
}
return B;
}
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
inline int radom(int l,int r){
return rd()%(r-l+1)+l;
}
inline void SA(){
double T=3000;
while(T>1e-15){
if((double)clock()/CLOCKS_PER_SEC>0.992){
write(ans);
for(register int i=1;i<=n;i++){
Write(Ans[i]);
}
exit(0);
}
int ra=radom(1,n);
int rb=radom(1,n);
if(ra==rb){
continue;
}
swap(now[ra],now[rb]);
int e=energy();
double delta=e-ans;
if(delta<0){
ans=e;
for(register int i=1;i<=n;i++){
Ans[i]=now[i];
}
}
else if(exp(-delta/T)*RAND_MAX<radom(0,RAND_MAX)){
swap(now[ra],now[rb]);
}
T*=0.995;
}
}
signed main(void){
n=read();
for(register int i=1;i<=n;i++){
a[i]=read();
}
for(register int i=1;i<=n;i++){
b[i]=read();
now[i]=i;
}
ans=energy();
while(1){
SA();
}
}
感觉没问题,可能是求 energy() 错了?