题目链接

题目

题目描述

在一个游戏中,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的更多相关文章

  1. tokitsukaze and Soldier 来源:牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1004 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K, ...

  2. codeforces Soldier and Number Game(dp+素数筛选)

    D. Soldier and Number Game time limit per test3 seconds memory limit per test256 megabytes inputstan ...

  3. 队列 Soldier and Cards

    Soldier and Cards 题目: Description Two bored soldiers are playing card war. Their card deck consists ...

  4. Soldier and Bananas

    Soldier and Bananas 题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=173141 题意: 给 ...

  5. CF Soldier and Cards (模拟)

    Soldier and Cards time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. CF Soldier and Badges (贪心)

    Soldier and Badges time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  7. HDU 5603 the soldier of love 离线+树状数组

    这是bestcorder 67 div1 的1003 当时不会做 看了赛后官方题解,然后翻译了一下就过了,而且速度很快,膜拜官方题解.. 附上官方题解: the soldier of love 我们注 ...

  8. 网络流(最大流) CodeForces 546E:Soldier and Traveling

    In the country there are n cities and m bidirectional roads between them. Each city has an army. Arm ...

  9. CodeForces 546 D. Soldier and Number Game(素数有关)

    Description Two soldiers are playing a game. At the beginning first of them chooses a positive integ ...

  10. 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 ...

随机推荐

  1. netstat 命令查看端口状态详解

    转载请注明出处: netstat 可以查看服务器当前端口列表及指定端口的连接状态等: -t : 指明显示TCP端口,t是TCP的首字母. -u : 指明显示UDP端口,u是UDP的首字母 -p : 显 ...

  2. spring--@Autowired @Qualifier @Resource @Value 四者的区别

    @Autowired,@Qualifier,@Resource,和 @Value 是 Spring 框架中用于依赖注入的注解,它们各有特点和用途: @Autowired: @Autowired 注解用 ...

  3. SD Host控制器的datasheet

    SD-Host控制器的datasheet更多的是给嵌入式软件工作人员使用,datasheet中主要包含一些寄存器以及读写擦除流程 寄存器主要有: 控制寄存器 状态寄存器 配置寄存器 软件和硬件进行交互 ...

  4. org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 2

    1.报错 在运行SpringBoot项目时遇到报错: 17:44:47.558 [main] ERROR org.springframework.boot.SpringApplication -- A ...

  5. 【TouchGFX 】使用 CubeMX 创建 TouchGFX 工程时 LCD 死活不显示

    生成的代码死活无法让LCD显示,经两个晚上的分析验证是LTDC_CLK引脚速度设置为低速导致,经测试中速.高速.超高速都正常,真是冤,聊以此以示纪念

  6. IDE-常用插件

    2021-8-25_IDE-常用插件 1. 背景 提升编写代码的舒适度,提升开发效率 2. 常用插件列表 IDE EVal Reset 白嫖付费的golang编辑器,reset插件可以重置golang ...

  7. linux-网络状态-netstat

  8. ingress nginx 支持的K8S版本以及nginx版本信息

  9. [转帖]Load Base Split

    https://docs.pingcap.com/zh/tidb/stable/configure-load-base-split#load-base-split Load Base Split 是 ...

  10. 【转帖】JAVA GC日志分析

    https://zhuanlan.zhihu.com/p/613592552 ​ 目录 1. GC分类 针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Par ...