提交时间:2025-11-27 20:44:19
运行 ID: 39003
#include<bits/stdc++.h> using namespace std; #define N 5005 #define int long long int n; int a[N],b[N],aa[N],bb[N]; int f[N][N][2][2]; int rka[N],rkb[N],ida[N],idb[N]; signed main(){ ios::sync_with_stdio(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; for(int i=1;i<=n;i++){ aa[i]=a[i],bb[i]=b[i]; } sort(aa+1,aa+n+1); sort(bb+1,bb+n+1); for(int i=1;i<=n;i++){ rka[i]=lower_bound(aa+1,aa+n+1,a[i])-aa; rkb[i]=lower_bound(bb+1,bb+n+1,b[i])-bb; ida[rka[i]]=i; idb[rkb[i]]=i; } memset(f,0x3f,sizeof(f)); f[0][0][0][0]=0; for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ if(j>0){ if(rka[idb[j]]>i){ f[i][j][0][0]=min(f[i][j][0][0],f[i][j-1][0][1]); f[i][j][0][1]=min(f[i][j][0][1],f[i][j-1][0][0]+b[idb[j]]); f[i][j][1][0]=min(f[i][j][1][0],f[i][j-1][1][1]); f[i][j][1][1]=min(f[i][j][1][1],f[i][j-1][1][0]+b[idb[j]]); } else{ f[i][j][0][0]=min(f[i][j][0][0],f[i][j-1][0][0]); f[i][j][0][1]=min(f[i][j][0][1],f[i][j-1][0][1]); f[i][j][1][0]=min(f[i][j][1][0],f[i][j-1][1][0]); f[i][j][1][1]=min(f[i][j][1][1],f[i][j-1][1][1]); } } if(i>0){ if(rkb[ida[i]]>j){ f[i][j][0][0]=min(f[i][j][0][0],f[i-1][j][1][0]); f[i][j][0][1]=min(f[i][j][0][1],f[i-1][j][1][1]); f[i][j][1][0]=min(f[i][j][1][0],f[i-1][j][0][0]+a[ida[i]]); f[i][j][1][1]=min(f[i][j][1][1],f[i-1][j][0][1]+a[ida[i]]); } else{ f[i][j][0][0]=min(f[i][j][0][0],f[i-1][j][0][0]); f[i][j][0][1]=min(f[i][j][0][1],f[i-1][j][0][1]); f[i][j][1][0]=min(f[i][j][1][0],f[i-1][j][1][0]); f[i][j][1][1]=min(f[i][j][1][1],f[i-1][j][1][1]); } } } } cout<<min(f[n][n][1][1],min(f[n][0][1][0],f[0][n][0][1]))<<endl; // for(int i=0;i<=n;i++){ // for(int j=0;j<=n;j++){ // cout<<f[i][j]<<' '; // } // cout<<endl; // } return 0; }