【贪心】【堆】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讲过的原题我回来对做法没有一丁点印象 有时候有这样一种题目 每个数有两种不同的价值 你可以选择价 ...
随机推荐
- vue中的表单异步校验方法封装
在vue项目的开发中,表单的验证必不可少,在开发的过程中,用的是vue+iview的一套,我们知道iview的表单验证是基于async-validator,对于async-validator不熟悉的可 ...
- 转一篇sublime必备的一些插件
Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/installatio ...
- 抓其根本(一)(hdu2710 Max Factor 素数 最大公约数 最小公倍数.....)
素数判断: 一.根据素数定义,该数除了1和它本身以外不再有其他的因数. 详见代码. int prime() { ; i*i<=n; i++) { ) //不是素数 ; //返回1 } ; //是 ...
- ubuntu下调整cpu频率
环境:ubuntu15.10 查看内核支持的cpu策略 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 比如我 ...
- postman测试express restful接口
安装express及postman var express = require('express') var app = express(); var calculation = require('. ...
- 基于Django Form源码开发自定义Form组件
import copy import re class ValidateError(Exception): def __init__(self, detail): self.detail = deta ...
- Linux 内核同步之自旋锁与信号量的异同【转】
转自:http://blog.csdn.net/liuxd3000/article/details/8567070 Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导 ...
- git学习笔记三
1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...
- linux命令(50):top命令
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中C ...
- hihocoder 1178 : 计数
#1178 : 计数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Rowdark是一个邪恶的魔法师.在他阅读大巫术师Lich的传记时,他发现一类黑魔法来召唤远古生物, ...