Luogu P2123 皇后游戏(贪心)

题目链接:P2123 皇后游戏
如果证明这个题为什么是贪心的话,我是不会的,但是一看这个题目就是一个贪心,然后满足贪心的性质:
都能从两个人(东西)扩展到n个人(东西)
一定能从相邻状态扩展到不相邻的状态
---摘自rain_falls
其实就是满足贪心的题目一定满足两个人的情况,就是由两个人推广到n个人.
我们先想一下两个人时的情况.
答案就是这个:
(min(max(a_1+b1,a_1+a_2)+b_2,max(a_2+b_2,a_1+a_2)+b_1))
如果前一项小那么就让第一个人排在前面,第二个人排在后面.
反之.

#include <iostream>
#include <algorithm> 
#include <cstdio>
#define ll long long
const ll maxN = 20000 + 7;
using namespace std;

struct Node{
	ll a,b;
}Map[maxN];
ll val[maxN];

bool cmp(Node a,Node b) {
	return max(a.a + a.b,a.a + b.a) + b.b < max(b.a+b.b,a.a+b.a)+ a.b;
}

int main() {
	ll T;
	cin >> T;
	while(T --) {
		ll ans = 0;
		ll n;
		cin >> n;
		for(ll i = 1;i <= n;++ i) 
			cin >> Map[i].a >> Map[i].b;
		sort(Map + 1,Map + n + 1,cmp);
		ll sum = Map[1].a;
		val[1] = Map[1].a + Map[1].b;
		ans = val[1];
		for(ll i = 2;i <= n;++ i) {
			sum += Map[i].a;
			val[i] = max(val[i - 1],sum) + Map[i].b;
			ans = max(val[i],ans); 
		}	
		printf("%lld
",ans);
	}
}

NOIP中关于贪心的题最难的一步就是发现它是个贪心233.