题意:一共有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);
}
}