题意:一共有n个问题,每个问题都有相应的s和g段,必须先解决s,然后才能解决g,两个人解决问题,问怎么解决使得总耗时最小。
思路:贪心。按照A.s+max(A.g,B.s)+B.g和B.s+max(B.g,A.s)+A.g;的ab先后顺序,排序即可。
code:
#include <bits/stdc++.h>
using namespace std;const int N=105;
struct node
{int g,s;
}v[N];
bool cmp(node A,node B){return A.s+max(A.g,B.s)+B.g<B.s+max(B.g,A.s)+A.g;
}
int main()
{int n;while (~scanf("%d",&n)){for (int i=0;i<n;i++) scanf("%d",&v[i].s);for (int i=0;i<n;i++) scanf("%d",&v[i].g);sort(v,v+n,cmp);int S=0,G=0;for (int i=0;i<n;i++){S+=v[i].s;if (G<=S) G=S+v[i].g;else G+=v[i].g;}printf("%d\n",G);}
}