【贪心】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\). 题解:首先贪心得出结论:如 ...
随机推荐
- LiteOS内核源码分析:动态内存之Bestfit分配算法
摘要:本文为大家剖析LiteOS动态内存模块bestfit算法的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要 ...
- Java变异出现错误:No enclosing instance of type XXX is accessible
摘要:写java代码时遇到下面的编译错误. 本文分享自华为云社区<Java中出现No enclosing instance of type XXX is accessible问题>,作者: ...
- 火山引擎DataTester分享:A/B实验中常见的8个错误
火山引擎DataTester是科学可信的A/B测试与智能优化平台,源自字节跳动长期沉淀,能够深度耦合推荐.广告.搜索.UI.产品功能等多种行业场景需求,为业务增长.转化.产品迭代,运营提效等各环节提供 ...
- 助力企业数据飞轮转起来!火山引擎云原生数仓ByteHouse全面大促中
用数据驱动业务提升,早已成为各类企业打破增长瓶颈,推动转型升级的一致共识.在大环境持续推动数字化转型的政策扶持下,企业仍然需要一个可借鉴的成熟经验模式,来彻底理解和实践数据驱动到底应该"怎么 ...
- Solon2 开发之IoC,三、注入或手动获取 Bean
1.如何注入Bean? 先了解一下Bean生命周期的简化版: 运行构建函数 尝试字段注入(有时同步注入,没时订阅注入.不会有相互依赖而卡住的问题) @Init 函数(是在容器初始化完成后才执行) .. ...
- MQTT(EMQX) - Linux CentOS Docker 安装
MQTT(EMQX) - Linux CentOS 直接安装 和 Docker 安装 常规安装 下载文件 版本选择:https://www.emqx.com/zh/downloads/broker/ ...
- docker安装aira2 pro与ariang以及alist推送下载的配置
Docker一键安装 aira2-pro: docker run -d --name aria2 --restart unless-stopped --log-opt max-size=1m -e P ...
- C++:如何将 LLVM 嵌套到你的项目中去
IDE: Clion LLVM cmake_minimum_required(VERSION 3.9) project(clang_demo) find_package(LLVM REQUIRED C ...
- 2019年第十届蓝桥杯国赛C++A组
蓝桥杯历年国赛真题汇总:Here 最后编辑时间: 2021年5月27日 统一声明 如果不写默认带有常用头文件 如果不表明主函数默认表示在 void solve(){} 默认使用 using names ...
- S3C2440移植uboot之新建单板_时钟_SDRAM_串口
上一节S3C2440移植uboot之启动过程概述我们我们分析了uboot启动流程,这节将开始新建一块单板支持S3C2440. 目录 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: 1.2 ...