NC50439 tokitsukaze and Soldier
题目
题目描述
在一个游戏中,tokitsukaze需要在n个士兵中选出一些士兵组成一个团去打副本。
第i个士兵的战力为v[i],团的战力是团内所有士兵的战力之和。
但是这些士兵有特殊的要求:如果选了第i个士兵,这个士兵希望团的人数不超过s[i]。(如果不选第i个士兵,就没有这个限制。)
tokitsukaze想知道,团的战力最大为多少。
输入描述
第一行包含一个正整数 \(n(1≤n≤10^5)\) 。
接下来 \(n\) 行,每行包括 \(2\) 个正整数 \(v,s(1≤v≤10^9,1≤s≤n)\) 。
输出描述
输出一个正整数,表示团的最大战力。
示例1
输入
2
1 2
2 2
输出
3
示例2
输入
3
1 3
2 3
100 1
输出
100
题解
知识点:贪心,优先队列。
这是一道典型的后悔贪心。
根据经验,后悔贪心一般具有三个因素:限制,花费和收益,其中花费和收益必定有一个是常量。比如这道题花费就是常量每次加入一个人,人数作为花费只增加 \(1\) ;而有的题则是收益是常量,比如建筑抢修,收益是抢修建筑数量每次只增加 \(1\) 。背包问题同样也有这三个因素,但其不同的是,限制容积是个常量,但花费和收益都是变量,因此无法使用后悔贪心。但鄙人水平有限,具体无法证明,只是经验之谈。
后悔贪心总体思路:把对选项数量的限制从严到松开放,则可选项会逐渐增多,并且原先选中的扔掉不会影响限制。这里的可选人数的限制是人数限制,由人数限制的最小值决定,人数限制越小可选的人越多,故缩小人数限制。
一开始不会踢人,直到人数与最小值缩小到相等开始踢人。此时缩小最小值,可选的人数变多,并且原来选中的人的限制人数并不影响最小值。考虑加入新人后,踢出战斗力最小的直到满足人数限制,此时就是当前人数限制下的最优解,这里是维护动态数组有序性,用堆处理。有可能会踢掉刚刚加进来的,不影响后面过程,因为后面限制人数只会比现在更小。最后得到了所有人数情况下的最优解,答案取最大值即可。
时间复杂度 \(O(n \log n)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node {
int v, s;
}a[100007];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 0;i < n;i++) {
cin >> a[i].v >> a[i].s;
}
sort(a, a + n, [&](node a, node b) {return a.s > b.s;});///按人数限制排序
///后悔贪心总体思路:把对选项数量的限制从严到松开放,则可选项会逐渐增多,并且原先选中的扔掉不会影响限制。
///这里的可选人数的限制是人数限制,由人数限制的最小值决定,人数限制越小可选的人越多,故缩小人数限制。
///一开始不会踢人,直到人数与最小值缩小到相等开始踢人。
///此时缩小最小值,可选的人数变多,并且原来选中的人的限制人数并不影响最小值。
///考虑加入新人后,踢出战斗力最小的直到满足人数限制,此时就是当前人数限制下的最优解。这里是维护动态数组有序性,用堆处理。
///有可能会踢掉刚刚加进来的,不影响后面过程,因为后面限制人数只会比现在更小。
///最后得到了所有人数情况下的最优解,答案取最大值即可。
priority_queue<int, vector<int>, greater<int>> pq;
ll ans = 0, sum = 0;
for (int i = 0;i < n;i++) {
pq.push(a[i].v);
sum += a[i].v;
while (pq.size() > a[i].s) sum -= pq.top(), pq.pop();
ans = max(ans, sum);
}
cout << ans << '\n';
return 0;
}
NC50439 tokitsukaze and Soldier的更多相关文章
- tokitsukaze and Soldier 来源:牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28886/1004 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K, ...
- codeforces Soldier and Number Game(dp+素数筛选)
D. Soldier and Number Game time limit per test3 seconds memory limit per test256 megabytes inputstan ...
- 队列 Soldier and Cards
Soldier and Cards 题目: Description Two bored soldiers are playing card war. Their card deck consists ...
- Soldier and Bananas
Soldier and Bananas 题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=173141 题意: 给 ...
- CF Soldier and Cards (模拟)
Soldier and Cards time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- CF Soldier and Badges (贪心)
Soldier and Badges time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- HDU 5603 the soldier of love 离线+树状数组
这是bestcorder 67 div1 的1003 当时不会做 看了赛后官方题解,然后翻译了一下就过了,而且速度很快,膜拜官方题解.. 附上官方题解: the soldier of love 我们注 ...
- 网络流(最大流) CodeForces 546E:Soldier and Traveling
In the country there are n cities and m bidirectional roads between them. Each city has an army. Arm ...
- CodeForces 546 D. Soldier and Number Game(素数有关)
Description Two soldiers are playing a game. At the beginning first of them chooses a positive integ ...
- Codeforces Round #304 (Div. 2) E. Soldier and Traveling 最大流
题目链接: http://codeforces.com/problemset/problem/546/E E. Soldier and Traveling time limit per test1 s ...
随机推荐
- jedis 与 redission 实现分布式锁
本文为博主原创,未经允许不得转载: 目录: 1. Jedis 实现分布式锁 2. Redission 实现分布式锁 为了确保分布式锁可用,至少要保证锁的实现同时满足以下几个条件 互斥性:在任意时刻只有 ...
- 到底什么样的 Java 项目用 Solon 好???
什么样的 Java 项目用 Solon 好 就像华为讲的,不要因为爱国而特意买华为手机.Solon 也是,有需要就用不需要就跳过(按正常的需求选择): 信创需要国产化,应该用 Solon 或者 Sol ...
- JMS微服务开发示例(九)相同的微服务,按用户所在城市来分配微服务器
虽然,默认情况下,多个相同的微服务,网关是自动根据微服务的压力情况,把用户请求分配到压力较轻的微服务器上. 但是,在某些业务情景下,我们可能希望人为去控制微服务的请求分配. 举个例子,我在北京.上海. ...
- [转帖]nginx 日志打印响应时间 request_time 和 upstream_response_time
https://www.cnblogs.com/chooperman/p/14722450.html 设置log_format,添加request_time,$upstream_response_ti ...
- [转帖]BF16 与 FP16 在模型上哪个精度更高呢
https://zhuanlan.zhihu.com/p/449345588 BF16 是对FP32单精度浮点数截断数据,即用8bit 表示指数,7bit 表示小数. FP16半精度浮点数,用5bit ...
- 400G 光模块的价格
400G 光模块的价格 令人惊叹... https://www.fs.com/cn/c/40g-100g-transceivers-889?pro_type=&sortby=priced&a ...
- ElasticSearch必知必会-基础篇
商业发展与职能技术部-体验保障研发组 康睿 姚再毅 李振 刘斌 王北永 说明:以下全部均基于eslaticsearch 8.1 版本 一.索引的定义 官网文档地址:https://www.elasti ...
- overflow的所有值,overlay不占位
visible: 默认值.内容不会被修剪,会呈现在元素框之外. hidden: 内容会被修剪,并且其余内容是不可见的. scroll: 内容会被修剪,总是显示滚动条. auto: 内容被修剪,超出浏览 ...
- Flask四剑客
目录 Flask四剑客 Flask四剑客 ''' 响应字符串 响应html页面 跳转页面 返回json字符串 ''' from flask import Flask, render_template, ...
- 从python3到python2的踩坑
为什么要从py3到py2 背景:之前自学写过一些py3,而且我写的工具是基于python3来写的,但是公司项目是使用python2版本,希望已有工具或者新写的工具能同时在py2和py3上执行,所以记录 ...