参考:http://blog.csdn.net/u010885899/article/details/48785763
刚开始看,没思路,看题解。题解的代码太6了
还是太弱了
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
int h,p;
int n,H;
vector<int> vecs[MAXN];
priority_queue<int,vector<int>,greater<int> > que;
int main()
{
ios::sync_with_stdio(false);
cin >> n >> H;
int t;
//h是出城要用的时间,min(H-h,n)则是他最远能在哪个城市
//这样预处理下,基本就和51nod 1163 最高的奖励 一样了
for(int i = 0; i < n; ++i)
{
cin >> h >> p;
t = min(H-h,n);
vecs[t].push_back(p);
}
int res = 0;
int s = 0;
for(int i = 1; i <= n; ++i)
{
while(que.size() >= i)
{
s -= que.top();
que.pop();
}
for(int x : vecs[i])
{
que.push(x);
s += x;
}
while(que.size() > i+1)
{
s -= que.top();
que.pop();
}
res = max(res,s);
}
cout << res << endl;
return 0;
}