每个物品有属性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的更多相关文章

  1. BZOJ2590 [Usaco2012 Feb]Cow Coupons

    好吧...想了半天想错了...虽然知道是贪心... 我们每次找没有被买的两种价格最小的牛,比较a = 当前差价最大的 + 当前优惠券价格最小的牛与b = 当前非优惠券价格最小的牛 所以...我们要 先 ...

  2. [Usaco2012 Feb] Cow Coupons

    [Usaco2012 Feb] Cow Coupons 一个比较正确的贪心写法(跑得贼慢...) 首先我们二分答案,设当前答案为mid 将序列按照用券之后能省掉的多少排序,那么我们对于两种情况 \(m ...

  3. 2590: [Usaco2012 Feb]Cow Coupons

    2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 306  Solved: 154[Su ...

  4. USACO 2012 Feb Cow Coupons

    2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MB Submit: 349 Solved: 181 [Su ...

  5. [Usaco 2012 Feb]Cow coupons牛券:反悔型贪心

    Description Farmer  John  needs  new  cows! There  are  N  cows  for  sale (1 <= N <= 50,000), ...

  6. [USACO12FEB]牛券Cow Coupons(堆,贪心)

    [USACO12FEB]牛券Cow Coupons(堆,贪心) 题目描述 Farmer John needs new cows! There are N cows for sale (1 <= ...

  7. BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心

    BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...

  8. 洛谷P3045 [USACO12FEB]牛券Cow Coupons

    P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...

  9. LuoguP3045牛券Cow Coupons

    LuoguP3045 [USACO12FEB]牛券Cow Coupons 果然我贪心能力还是太差了 ZR讲过的原题我回来对做法没有一丁点印象 有时候有这样一种题目 每个数有两种不同的价值 你可以选择价 ...

随机推荐

  1. Winform GDI+

    什么是GDI+ GDI (Graphics Device Interface), 是属于绘图方面的 API (Application Programming Interface). 因为应用程序不能直 ...

  2. jq_从右向右的滑入滑出效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Python与RPC -- (转)

    XML-RPC xmlrpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据. 一个rpc系统,必然包括2个部分: 1)rpc client,用来向rpc server调 ...

  4. 【转】MP3文件原理及结构解析

    1.引言文件压缩技术的日新月异使得MP3成为时下最烫手的音乐格式,优质的音乐随着0与1的排列迅速散布 到世界各地,撼动人心.何谓MP3?MP3的全称是MPEG Audio Layer 3,它是一种高效 ...

  5. libSVM笔记之(一)在matlab环境下安装配置libSVM

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing 台湾林智仁教 ...

  6. python基础===* 解包,格式化输出和print的一点知识

    python3中的特性: >>> name = "botoo" >>> print(f"my name is {name}" ...

  7. Python基础===使用virtualenv创建一个新的运行环境

    virtualenv简直是一个神器,以ubuntu环境为例, 先安装virtualenv 然后执行如下命令: 多版本创建env的方式: virtualenv 虚拟环境文件目录名 python=pyth ...

  8. kivy安装

    >>> os.system('pip install kivy')Collecting kivy Downloading Kivy-1.9.1-cp27-none-win_amd64 ...

  9. [ python ] 类的组合

    首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...

  10. 从一个R语言案例学线性回归

    线性回归简介 如下图所示,如果把自变量(也叫independent variable)和因变量(也叫dependent variable)画在二维坐标上,则每条记录对应一个点.线性回规最常见的应用场景 ...