#include<iostream> #include<algorithm> using namespace std; const int maxn=1010; struct node//三元组结构 { int id;//工作编号 int ab;//在哪个机器 int times;//时间 bool operator < (node tmp)const { return times<tmp.times;//按时间从小到大排序 } }; void johnson(node s[],int n,int a[],int b[],int c[])//Johnson算法 生成三元组表s { for(int i=1;i<=n;i++) { if(a[i]>b[i]) s[i].ab=2,s[i].times=b[i]; else s[i].ab=1,s[i].times=a[i]; s[i].id=i; } sort(s+1,s+n+1);//按times从下到大排序 int l=0,r=n+1; for(int i=1;i<=n;i++)//生成加工顺序 { if(s[i].ab==1) c[++l]=s[i].id; if(s[i].ab==2) c[--r]=s[i].id; } } int main() { int n; while(cin>>n){ int a[maxn],b[maxn],c[maxn],t[maxn]; node s[maxn]; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; johnson(s,n,a,b,c); for(int i=1;i<=n;i++)计算最少时间 t[i]=t[i-1]+a[c[i]]; int ans=t[1]+b[c[1]]; for(int i=2;i<=n;i++) ans=max(ans,t[i])+b[c[i]]; cout<<ans<<endl;//答案 } return 0; }