POJ 2751 Saving Endeavour

题意: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;
}


你可能感兴趣的:(POJ 2751 Saving Endeavour)