51nod 1099 任务执行顺序(贪心)
使数组按照(o-r)大小来排序就好,在算第i个数的最大值时,前i-1个数决定了其初始值sum,那么将(o-r)越小的放在后面越优
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
struct Node
{
int o,r,c;
}a[N];
bool cmp(Node a,Node b)
{
return a.c > b.c;
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%d%d",&a[i].o,&a[i].r);
a[i].c = a[i].o-a[i].r;
}
sort(a,a+n,cmp);
int maxn = 0, sum = 0;
for(int i = 0; i < n; i++)
{
maxn = max(maxn, sum+a[i].o);
sum += a[i].r;
maxn = max(maxn, sum);
}
printf("%d\n",maxn);
return 0;
}