博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【贪心】【堆】Gym -100956D - Greedy Game
阅读量:6817 次
发布时间:2019-06-26

本文共 937 字,大约阅读时间需要 3 分钟。

题意:给定n个物品,每个物品对于A和B来说具有不同的价值,记为ai,bi,两人交替取,A先手,A总是贪心地取当前剩下的物品中,对于他价值最高的,如果有多个,则任取一个。问B在最坏情况下,能取到的物品的对他的价值和最大是多少。

先把物品以ai为第一关键字,bi为第二关键字排序。这样A每次必定从最左端取。容易发现,A必定会在2,3中取至少1个,在2,3,4,5中取至少2个,在2,3,4,5,6,7中取至少3个……因此,一开始,我们假设B取得的都是偶数位的物品,然后更新这些当前最优的物品集合,发现,如果把这个集合中的物品换成它右侧的物品,仍然可以保证合法,因此,可以从左到右枚举物品,维护一个小根堆,尝试用奇数位的物品去更新当前堆,保证堆里面的物品是当前最优的,最后堆里面剩下的就是答案。具体看代码。

#include
#include
#include
#include
using namespace std;typedef long long ll;typedef pair
Point;priority_queue
,greater
>heap;Point a[100010];bool cmp(const Point &a,const Point &b){ return a.first!=b.first ? a.first>b.first : a.second>b.second;}int n;int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i].first); for(int i=1;i<=n;++i) scanf("%d",&a[i].second); sort(a+1,a+n+1,cmp); for(int i=2;i

转载于:https://www.cnblogs.com/autsky-jadek/p/6287933.html

你可能感兴趣的文章
我的友情链接
查看>>
更改WIIN7下C盘根目录下的写入权限
查看>>
python符号打印,bpython ,脚本tab自动补全
查看>>
python生成随机验证码
查看>>
续上篇LVS脚本
查看>>
jenkins安装
查看>>
RPMBUILD
查看>>
HDC与CDC
查看>>
MySQL常用函数(转)
查看>>
VC编程之标题栏和菜单
查看>>
vs 2008下安装detours3.0
查看>>
网站防篡改脚本
查看>>
第 8 章 容器网络 - 068 - 分析 Calico 的网络结构
查看>>
全面掌握ping命令(三) ping命令防火墙设置
查看>>
GhostDoc使用与原始注释
查看>>
简单的邮件协议服务介绍
查看>>
宏和函数的区别
查看>>
Dubbo架构设计详解
查看>>
常用十大python机器学习库
查看>>
手机游戏渠道SDK接入工具项目分享(一)缘起
查看>>