题解 | #tokitsukaze and Soldier#

tokitsukaze and Soldier

https://ac.nowcoder.com/acm/problem/50439

贪心,对于【s】从大到小处理,对当前不满足【s】要求的按价值最小出队,则队列中元素为已处理过的元素在【s】下的最优要求。

#include<algorithm>
#include<cmath>
#include<numeric>
#include<vector>
#include<iomanip>
#include<queue>
typedef long long ll;
const double eps = 1e-4;
using namespace std; 
ll n;
vector<int> sor[100005];
priority_queue<int,vector<int>,greater<int>> q;//优先队列价值升序
int main()
{
	int n = 0; cin >> n;
	int s, v;
	for (int i = 1; i <= n; i++)
	{	
		cin >> v >> s;
		sor[s].push_back(v);
	}
	int sum = 0; int ans = 0;
	for (int i = n; i >= 1; i--)
	{
		for (auto a : sor[i])
		{
			sum += a;
			q.push(a);
		}
		while (q.size() > i)
		{
			sum -= q.top();
			q.pop();
		}
		ans = max(ans, sum);
	}
	cout << ans << endl;
	return 0;
}

全部评论

相关推荐

我的名字是句号:接好运
点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务