【贪心】【堆】Gym -100956D - Greedy Game
题意:给定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<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> Point;
priority_queue<int,vector<int>,greater<int> >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<n;i+=2)
{
heap.push(a[i].second);
int x=heap.top();
if(x<a[i+1].second)
{
heap.pop();
heap.push(a[i+1].second);
}
}
ll ans=0;
if(n%2==0)
ans=a[n].second;
while(!heap.empty())
{
ans+=heap.top();
heap.pop();
}
cout<<ans<<endl;
return 0;
}
【贪心】【堆】Gym -100956D - Greedy Game的更多相关文章
- 【贪心+堆】XMU 1584 小明的烦恼
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...
- BZOJ_2151_种树_贪心+堆+链表
BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆
BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是 ...
- 【bzoj4425】[Nwerc2015]Assigning Workstations分配工作站 贪心+堆
题目描述 佩内洛普是新建立的超级计算机的管理员中的一员. 她的工作是分配工作站给到这里来运行他们的计算研究任务的研究人员. 佩内洛普非常懒惰,不喜欢为到达的研究者们解锁机器. 她可以从在她的办公桌远程 ...
- 【bzoj1029】[JSOI2007]建筑抢修 贪心+堆
题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...
- 【bzoj2802】[Poi2012]Warehouse Store 贪心+堆
题目描述 有一家专卖一种商品的店,考虑连续的n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他.如果要满足顾客的需求,就必须要有足够的库存.问 ...
- BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板 贪心 + 堆 + 反向思考
Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50, ...
- Gym - 102059D 2018-2019 XIX Open Cup, Grand Prix of Korea D. Dumae 贪心+堆
题面 题意:有3e5个人排成一列,然后Li,Ri表示每个人可以站在[Li,Ri]中的一个,然后M(1e6)个限制条件,某个人一定要在某个人前面,求一种合法方案,无解输出-1 题解:首先可以想到对于限制 ...
随机推荐
- Maven常用插件配置和使用
主要介绍Maven的几个常见第三方插件(cobertura.findbugs.source.assembly.插件开发)配置和使用,接Maven介绍 maven本质上是一个插件框架,它的所有工作都交给 ...
- JavaBean,List,Map转成json格式
public class User { private String username; private String password; public String getUsername() { ...
- mytest 截图
- 求余区间的求和类问题 离线+线段树 HDU4228
题目大意:给一个数组a,他的顺序是严格的单调增,然后有如下三个操作 ①加入一个val到a数组里面去,加入的位置就是a[i-1]<val<a[i+1] ②删除一个a[i]=val的值 ③查询 ...
- SQL求解两个时间差
sql 求解两个时间差 SELECTDATEDIFF( Second, '2009-8-25 12:15:12', '2009-9-1 7:18:20') --返回相差秒数 SELECTDATEDIF ...
- iptables原理详解以及功能说明
原文:http://www.svipc.com/thread-450-1-1.html 前言 iptables其实就是Linux下的一个开源的信息过滤程序,包括地址转换和信息重定向等功能的,他由四 ...
- vim Podfile
platform :ios, "7.0"pod "AFNetworking"pod "SDWebImage"pod "SVProg ...
- 10、end关键字和Fibonacci series: 斐波纳契数列
# Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 #复合赋值表达式,a,b同时赋值0和1 while b < 10: print(b ...
- javascript学习01
1/js 中所有的数字都是浮点型,所以5/2=2.5 6.5%2.1=0.2 2/delete用于删除对象的属性或者是数组元素: var o={x=1,y=2}:delete o.x; x i ...
- Android开发学习资源
https://developer.android.google.cn/training/index.html