【贪心】【堆】bzoj2590 [Usaco2012 Feb]Cow Coupons
每个物品有属性a,b
考虑在仅仅用光优惠券时的最优方案。
显然是按照b排序,取前K个。
但是我们还要尽可能去取剩余的。
假设朴素地取剩余的话,应该把剩余的对a排序,然后尽量去取。
但是有可能对其用优惠券,而对之前的某个不用优惠券,比原来优,这时我们就要更新用优惠券的物品集合。
对a-b的差值用堆维护即可。
#include<cstdio>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std;
struct data{
int a,b;
}a[50010];
bool cmp(const data &a,const data &b){
return a.b<b.b;
}
bool cm2(const data &a,const data &b){
return a.a<b.a;
}
typedef long long ll;
priority_queue<int,vector<int>,greater<int> >q;
int n,K;
ll m,sum;
int main(){
cin>>n>>K>>m;
for(int i=1;i<=n;++i){
scanf("%d%d",&a[i].a,&a[i].b);
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=K;++i){
sum+=(ll)a[i].b;
q.push(a[i].a-a[i].b);
if(sum>m){
printf("%d\n",i-1);
return 0;
}
}
sort(a+K+1,a+n+1,cm2);
for(int i=K+1;i<=n;++i){
if(a[i].a-a[i].b<=q.top()){
sum+=(ll)a[i].a;
}
else{
sum+=(ll)q.top();
q.pop();
q.push(a[i].a-a[i].b);
sum+=(ll)a[i].b;
}
if(sum>m){
printf("%d\n",i-1);
return 0;
}
}
printf("%d\n",n);
return 0;
}
【贪心】【堆】bzoj2590 [Usaco2012 Feb]Cow Coupons的更多相关文章
- BZOJ2590 [Usaco2012 Feb]Cow Coupons
好吧...想了半天想错了...虽然知道是贪心... 我们每次找没有被买的两种价格最小的牛,比较a = 当前差价最大的 + 当前优惠券价格最小的牛与b = 当前非优惠券价格最小的牛 所以...我们要 先 ...
- [Usaco2012 Feb] Cow Coupons
[Usaco2012 Feb] Cow Coupons 一个比较正确的贪心写法(跑得贼慢...) 首先我们二分答案,设当前答案为mid 将序列按照用券之后能省掉的多少排序,那么我们对于两种情况 \(m ...
- 2590: [Usaco2012 Feb]Cow Coupons
2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 306 Solved: 154[Su ...
- USACO 2012 Feb Cow Coupons
2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MB Submit: 349 Solved: 181 [Su ...
- [Usaco 2012 Feb]Cow coupons牛券:反悔型贪心
Description Farmer John needs new cows! There are N cows for sale (1 <= N <= 50,000), ...
- [USACO12FEB]牛券Cow Coupons(堆,贪心)
[USACO12FEB]牛券Cow Coupons(堆,贪心) 题目描述 Farmer John needs new cows! There are N cows for sale (1 <= ...
- BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心
BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- LuoguP3045牛券Cow Coupons
LuoguP3045 [USACO12FEB]牛券Cow Coupons 果然我贪心能力还是太差了 ZR讲过的原题我回来对做法没有一丁点印象 有时候有这样一种题目 每个数有两种不同的价值 你可以选择价 ...
随机推荐
- idea 调试远程tomcat
# ----- Execute The Requested Command ----------------------------------------- JAVA_OPTS="-age ...
- 【tomcat】手动部署动态JavaWeb项目到tomcat
1.通过修改server.xml进行配置 1.查看项目的目录结构: tomcat运行时加载WebConmtent目录
- iOS APP程序启动原理
UIApplication 程序启动原理 一个应用程序运行就必须要有一个进程,一个进程至少要有一个线程,我们把这个线程叫做主线程,主线程开启之后会开启一个主运行循环,如果不开启一个运行循环,程序开启了 ...
- javascript 常用DOM操作整理
.选取了DOM操作中实用并常用的部分,省略了实用但有明显兼容性的部分2.DOM属性和方法的类型归属可能并不完全准确3.某些一般兼容性和特点做了标识(主要是ie8-9上下) 节点类型 节点类型 节点值 ...
- Mycat 读写分离
简介 Mycat 是 MySQL中间件,Mycat的原理中最重要的一个动词就是'拦截',它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析.路由分析.读写分离分析.缓存分 ...
- [ python ] 反射及item系列
反射 什么是反射? 通过字符串的形式操作对象相关属性.python中的事物都是对象: 关键方法: (1)getattr:获取属性 (2)setattr:设置属性 (3)hashattr:检测是否含有属 ...
- 一位资深程序员大牛给予Java初学者的学习建议
这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议? 今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶 ...
- php的设计模式------工厂模式
1.工厂模式简介 属于创建型模式.定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行主要解决的问题:接口选择的问题. 2.分类 2.1 简单工厂模式 接口: ...
- JavaScript自定义事件,动态添加属性
根据事件的不同,可用的自定义方法也不同. document.createEvent('Event'); 实现主要有4个步骤: 1.创建事件. 2.初始化事件(三个参数:事件名,是否起泡,是否取消默认触 ...
- [PAT] 1144 The Missing Number(20 分)
1144 The Missing Number(20 分) Given N integers, you are supposed to find the smallest positive integ ...