BZOJ2590 [Usaco2012 Feb]Cow Coupons
好吧。。。想了半天想错了。。。虽然知道是贪心。。。
我们每次找没有被买的两种价格最小的牛,比较a = 当前差价最大的 + 当前优惠券价格最小的牛与b = 当前非优惠券价格最小的牛
所以。。。我们要
先维护两个小根堆,分别表示用优惠券买的牛的价格和不用优惠券买的牛的价格
还有个叫Recover的大根堆,表示当前几个用优惠券的那几头牛的差价(差价定义为非优惠价格与优惠价格的差值)
a与b哪个小就买哪个。。。
/**************************************************************
Problem: 2590
User: rausen
Language: C++
Result: Accepted
Time:140 ms
Memory:3332 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#include <queue> using namespace std;
typedef long long ll;
const int N = ;
struct data{
int w, v;
data(void){}
data(int x, int y) : w(x), v(y) {}
};
inline bool operator < (const data a, const data b){
return a.v > b.v;
}
int cnt, n, k;
int p[N], c[N];
bool vis[N];
ll m;
priority_queue <data> h, H;
priority_queue <ll, vector<ll>, greater<ll> > Re; inline int read(){
int x = ;
char ch = getchar();
while (ch < '' || ch > '')
ch = getchar();
while (ch >= '' && ch <= ''){
x = x * + ch - '';
ch = getchar();
}
return x;
} int main(){
int i;
ll cost;
data T;
n = read(), k = read();
scanf("%lld", &m);
for (i = ; i <= n; ++i){
p[i] = read(), c[i] = read();
h.push(data(i, c[i]));
H.push(data(i, p[i]));
}
while (!Re.empty()) Re.pop();
for (i = ; i <= k; ++i)
Re.push();
while (m > && cnt < n){
while (vis[h.top().w])
h.pop();
while (vis[H.top().w])
H.pop();
if (Re.top() + h.top().v < H.top().v){
T = h.top(), cost = Re.top() + T.v;
if (m < cost) break;
m -= cost;
Re.pop();
Re.push(p[T.w] - c[T.w]);
vis[T.w] = ;
}else{
T = H.top(), cost = T.v;
if (m < cost) break;
m -= cost;
vis[T.w] = ;
}
++cnt;
}
printf("%d\n", cnt);
return ;
}
BZOJ2590 [Usaco2012 Feb]Cow Coupons的更多相关文章
- 【贪心】【堆】bzoj2590 [Usaco2012 Feb]Cow Coupons
每个物品有属性a,b 考虑在仅仅用光优惠券时的最优方案. 显然是按照b排序,取前K个. 但是我们还要尽可能去取剩余的. 假设朴素地取剩余的话,应该把剩余的对a排序,然后尽量去取. 但是有可能对其用优惠 ...
- 2590: [Usaco2012 Feb]Cow Coupons
2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 306 Solved: 154[Su ...
- [Usaco2012 Feb] Cow Coupons
[Usaco2012 Feb] Cow Coupons 一个比较正确的贪心写法(跑得贼慢...) 首先我们二分答案,设当前答案为mid 将序列按照用券之后能省掉的多少排序,那么我们对于两种情况 \(m ...
- 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), ...
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- BZOJ1631: [Usaco2007 Feb]Cow Party
1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 459 Solved: 338[Submit ...
- BZOJ3301: [USACO2011 Feb] Cow Line
3301: [USACO2011 Feb] Cow Line Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 67 Solved: 39[Submit ...
- BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序
1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 215[S ...
随机推荐
- 20145314郑凯杰《网络对抗技术》PE文件病毒捆绑(插入捆绑)的实现
20145314郑凯杰<网络对抗技术>PE文件病毒捆绑(插入捆绑)的实现 一.本节摘要 简介:每个应用程序内部都有一定的空间(因为文件对齐余留的00字段)可以被利用,这样就可以保证被插入的 ...
- 20145334赵文豪 WEB基础实践
实验问题回答 1.什么是表单 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏域.多行文本框.复选框.单选框.下拉选择框和文件上传框等 表单 ...
- JS中的按位非(~)的使用技巧
按位非 按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码 现在让我来看几个例子 例子1 console.log(4); console.log(~4); console.log( ...
- 1、webpack编译打包Sass编译的css进js文件
cnpm install css-loader --save-dev //css-loader 是将css打包进js cnpm install style-loader --save-dev ...
- js自动小轮播
使用定时器,换个图片地址. 从1到5换,如果大于5了再跳到1,点击停止时关闭定时器. <!-- Author: XiaoWen Create a file: 2016-12-08 13:19:2 ...
- 05_Kafka Python_Consumer模拟
Python客户端: Kafka-python 安装: pip install kafka-python Consumer端模拟代码 """ Kafka Consum ...
- MUI --- 多个页面之间的传值 A页面B 页面 C页面
问题: 夸页面传值的,A.B.C三个页面,点A弹出B,C是B子页面;A有两个值要传到C页面中,要怎么样传递呢? A页面传值就不累述了 B页面才是关键 mui.plusReady(function() ...
- Java 面向对象之继承和重写OverWrite,重写和重载的区别,抽象类
01继承的概述 A:继承的概念 a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作 ...
- Windows系统下在Eclipse中集成Python
我现在偶尔开发代码,已经不用Eclipse了,主要原因是查看Jar包中的代码反编译十分不便,项目加载的时候卡,偶尔还会崩溃 用Intellij IDEA和PyCharm 原来的笔记如何在Eclipse ...
- 【转】VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
☞ 本文主要介绍软件『VMware Workstation(虚拟机)』的相关内容:VMware网络连接模式—桥接.NAT以及仅主机模式的详细介绍和区别. 其下列版本/分支可以参考本文: 全部版本/分支 ...