{HDU}{4221}{Greedy}{Greedy}

贪心处理,关键是寻找题意中隐含的条件,并且证明贪心算法的正确性。输出一定用"%I64d"而不是"%lld"!

#include <iostream>

#include <string>

#include <cstring>

#include <cstdio>

#include <algorithm>

#include <memory>

#include <cmath>

#include <bitset>

#include <queue>

#include <vector>

#include <stack>

using namespace std;



const int MAXN = 100050;



#define CLR(x,y) memset(x,y,sizeof(x))

#define MIN(m,v) (m)<(v)?(m):(v)

#define MAX(m,v) (m)>(v)?(m):(v)

#define ABS(x) ((x)>0?(x):-(x))

#define rep(i,x,y) for(i=x;i<y;++i)



typedef struct{

	int c,d;

}Node;

bool operator<(const Node& a, const Node& b)

{

	return a.d < b.d;

}



int t,tt;

long long ans;

int n;

Node node[MAXN];



int work()

{

	int i,j,c,d;

	long long cur,tmp;

	scanf("%d",&n);

	rep(i,0,n)

		scanf("%d%d",&node[i].c,&node[i].d);

	sort(node,node+n);

	ans = 0;

	cur = 0;

	rep(i,0,n){

		cur += node[i].c;

		if( cur > node[i].d ) {

			tmp = cur - node[i].d;

			if( tmp > ans )

				ans = tmp;

		}

	}

	printf("Case %d: %I64d\n",t+1,ans);

	return 0;

}

int main()

{

	scanf("%d",&tt);

	rep(t,0,tt){

		work();

	}

	return 0;

}

 

你可能感兴趣的:(HDU)