题意:n个零件,需要经过两道工序,工序不能颠倒,且只能有一个零件在一道工序上加工,求最快时间。
题解:贪心,推导公式然后排序即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Data
{
int a,b;
}po[10005];
bool comp(Data x,Data y)
{
return x.a+max(y.a,x.b)+y.b<y.a+max(x.a,y.b)+x.b;
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
for(int i=0;i<n;i++)
scanf("%d%d",&po[i].a,&po[i].b);
sort(po,po+n,comp);
int ans1=0,ans2=0;
for(int i=0;i<n;i++)
{
ans2=max(ans1+po[i].a,ans2)+po[i].b;
ans1+=po[i].a;
}
printf("%d\n",ans2);
}
return 0;
}