【贪心】AGC018C Coins
现在有 \(X+Y+Z\) 个人,第 \(i\) 个人有三个权值 \(a_i,b_i,c_i\),现在要求依次选出 \(X\) 个人,\(Y\) 个人和 \(Z\) 个人(一个人只能选依次),使得这 \(X\) 个人的 \(a\) 权值,\(Y\) 个人的 \(b\) 权值,\(Z\) 个人的 \(c\) 权值之和最大。
\(X,Y,Z\le 10^5\)。
技巧:排序证明贪心的正确性
一道很有启发意义的贪心题。
考虑只有两种权值 \(a,b\) 的时候我们怎么做,我们会先假设所有人都选 \(b\),然后把所有人按 \(a_i-b_i\) 从大到小排序,选前 \(X\) 个人从 \(b\) 变成 \(a\)。
这个贪心过程的正确性显然,但却不是很好严谨地证明。但是我们考虑这样一种表述方式:
“将所有人按照 \(a_i-b_i\) 从大到小排序,那么所有选择 \(a\) 的人一定排在所有选择 \(b\) 的人左边。”
这个的证明非常简单明了:如果有左 \(b\) 右 \(a\) 的对,把他们交换,显然很优!
而这个证明的简单明了,意味着它的做法可以放到这道题上面。
具体地,我们仍然把所有人按 \(a_i-b_i\) 从大到小排序,那么所有选择 \(a\) 的人依然一定排在所有选择 \(b\) 的人左边,尽管不是所有人都选了 \(a\) 或 \(b\)。
于是一定存在一个分界点 \(k\),在 \(k\) 左边的所有人选的都是 \(a\) 或 \(c\),在 \(k\) 右边的所有人选的都是 \(a\) 或 \(b\)。
两边分别拿个对顶堆维护即可。时间复杂度 \(O(n\log n)\)。
【贪心】AGC018C Coins的更多相关文章
- AGC018C Coins (set)
题目大意: 给出n个人,每个人手里都有xi个金牌,yi个银牌,ci个铜牌. 你需要选出X个人,拿走他们手里的金牌,选出Y个人,拿走他们手里的银牌,选出Z个人,拿走他们手里的铜牌 X+Y+Z = n.并 ...
- 【Note】贪心
感谢 $ \text{orzws/chy} $ 倾情授课. 目录 -1. 证明方式 0. 朴素贪心 AT2557 [ARC073C] Ball Coloring P2587 [ZJOI2008]泡泡堂 ...
- poj1742 Coins【多重背包】【贪心】
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions:43969 Accepted: 14873 Descriptio ...
- CF 1003D Coins and Queries【位运算/硬币值都为2的幂/贪心】
Polycarp has n coins, the value of the i-th coin is ai. It is guaranteed that all the values are int ...
- Codeforces Round #494 (Div. 3) D. Coins and Queries(贪心
题目链接 题目大意:给你n个物品,第iii个物品价值aia_iai,询问q次,问你能不能凑出价值为qiq_iqi的物品. 小贪心吧.从大到小找,能拿就拿就行了. #include<bits/ ...
- Coins and Queries(map迭代器+贪心)
题意 n个硬币,q次询问.第二行给你n个硬币的面值(保证都是2的次幂!).每次询问组成b块钱,最少需要多少个硬币? Example Input 5 42 4 8 2 4851410 Output 1- ...
- 【贪心】【堆】AtCoder Grand Contest 018 C - Coins
只有两维的时候,我们显然要按照Ai-Bi排序,然后贪心选取. 现在,也将人按照Ai-Bi从小到大排序,一定存在一个整数K,左侧的K个人中,一定有Y个人取银币,K-Y个人取铜币: 右侧的X+Y+Z-K个 ...
- CF1003D Coins and Queries 贪心
Coins and Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- $POJ1742\ Coins$ 多重背包+贪心
Vjudge传送门 $Sol$ 首先发现这是一个多重背包,所以可以用多重背包的一般解法(直接拆分法,二进制拆分法...) 但事实是会TLE,只能另寻出路 本题仅关注“可行性”(面值能否拼成)而不是“最 ...
- Codeforces Round #494 (Div. 3) D. Coins and Queries (贪心,数学)
题意:给你一组全是\(2^d\ (d\ge0)\)的数,询问q次,每次询问一个数,问这个数是否能够由原数组中的数相加得到,如果能,输出最少用多少个数,否则输出\(-1\). 题解:首先贪心得出结论:如 ...
随机推荐
- 揭秘GES超大规模图计算引擎HyG:图切分
摘要:GES大规模图计算引擎HyG通过实现不同的点边分区算法,可以灵活地供用户选择多种多样的切分策略,进而达到更好的运算性能. 本文分享自华为云社区<GES超大规模图计算引擎HyG揭秘之图切分& ...
- 10个问题让你快速避开java中的jdbc常见坑
摘要:JDBC,即Java Database Connectivity,java数据库连接.是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范. 本文分享自华为云社区<1 ...
- 挖掘优质短视频超百万条,火山引擎DataLeap助力电商平台生态治理
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在人们的日常生活中,网购已经成为人们生活中不可或缺的购物形式. 根据<中国社交电商行业发展白皮书( ...
- 火山引擎DataLeap如何解决SLA治理难题(二):申报签署流程与复盘详解
申报签署流程详解 火山引擎DataLeap SLA保障的前提是先达成SLA协议.在SLA保障平台中,以申报单签署的形式达成SLA协议.平台核心特点是优化了SLA达成的流程,先通过"系统卡点计 ...
- Solon2 之基础:三、启动参数说明
启动参数,在应用启动后会被静态化(为了内部更高效的利用).比如,想通过体外扩展加载配置,是不能改掉它们的. 1.启动参数 启动参数 对应的应用配置 描述 --env solon.env 环境(可用于内 ...
- django基本流程
创建项目 django-admin startproject web cd web python manage.py startapp weblist 生成迁移文件 python manage.py ...
- ChatGPT带你入门机器学习:逻辑回归模型博客和小红书风格文案一次搞定!
打脸了 顺手向大家演示一下如何用 ChatGPT 写技术博客吧,其实蛮简单的,特别需要操心的是它会一本正经的胡说八道,还信誓旦旦的.我们要审查它的回答,万不可全信. 为了便于阅读,我把prompt加粗 ...
- C#9.0:Top-Level Programs
我们称之为顶级层序 用 C# 编写一个简单的程序需要大量的样板代码,引用,类.方法.结构体等: 1 class Program 2 { 3 static void Main(string[] args ...
- Codeforces Round #656 (Div. 3)部分题解
Codeforces Round #656 (Div. 3)题解 A.Three Pairwise Maximums 解题思路: 依照题意和样例,三个整数x,y,z必须有两个相同且都比第三个数大. 如 ...
- P3574 [POI2014]FAR-FarmCraft (树形DP)
这题直接贪心显然不可行. 考虑树形dp,用 \(f_i\) 表示到 \(i\) 人后,以 \(i\) 为根的所有人安装完的最短时间. 对于一个节点 \(u\), 假设拜访子节点的顺序为 \(v_1,v ...