51nod 1099 任务执行顺序 (贪心算法)

题目:传送门

题意:中文题。

题解:r[i]-o[i]值大的先进行。反证法:如果大的后进行,会导致空间增大,所以一定大的是先进行。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
struct sa
{
    ll r,o,c;
} data[100005];
bool cmp(sa x,sa y) //注意这个排序方式 差值大的先进行
{
    return x.c>y.c;
}
int main()
{
    ll n;
    while(cin>>n)
    {
        for(int i=0; i<n; i++)
        {
            cin>>data[i].r>>data[i].o;//注意(O[i]<R[i])  这个很重要
            data[i].c=data[i].r-data[i].o;
        }
        sort(data,data+n,cmp);
        ll ans=0,tmp=0;
        for(int i=0; i<n; i++)
        {
            ans=max(ans,tmp+data[i].r);
            tmp+=data[i].o;
        }
        cout<<ans<<endl;
    }
    return 0;
}

 

posted @ 2016-08-12 12:31  Ritchie丶  阅读(416)  评论(0编辑  收藏  举报