LuoguP3045 [USACO12FEB]牛券Cow Coupons

果然我贪心能力还是太差了

ZR讲过的原题我回来对做法没有一丁点印象

有时候有这样一种题目

每个数有两种不同的价值

你可以选择价值低的,也可能花费一些神秘能力去获得价值高的

这时候我们直接贪心就可能会出现这种情况

当前最后解不是全局最优解

一般这种时候有两节决策,

要么DP

要么尝试进行可反悔的贪心

我们先按照所有牛的优惠后的价格排序,开一个小根堆

将前\(k\)个用优惠劵去买,很明显这可能是错误的

我们就将优惠券买的每一头牛的\(p - c\)丢到堆中,

对于一头使用了优惠券的牛\(i\)和未使用优惠券的牛\(j\)

如果有
\[ c_i+p_j > c_j+p_i \]
那么说明把优惠券用到\(j\)上更优

那么我们就把后\(n - k\)头牛按照\(p\)排序

每次看一看反悔是否更优就好了

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
#define pii pair<LL,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
const int N = 1e5 + 3;
priority_queue <pii,vector<pii>,greater<pii> > q;
LL n,m,k;int ans;
struct node{LL p;LL c;
}a[N];
bool book[N];
LL sum,tot;
inline bool cmp(node x,node y){return x.c < y.c;
}
inline bool cmpp(node x,node y){return x.p < y.p;
}
inline LL read(){LL v = 0,c = 1;char ch = getchar();while(!isdigit(ch)){if(ch == '-') c = -1;ch = getchar();}while(isdigit(ch)){v = v * 10 + ch - 48;ch = getchar();}return v * c;
}
int main(){n = read(),k = read(),m = read();for(int i = 1;i <= n;++i) a[i].p = read(),a[i].c = read();sort(a + 1,a + n + 1,cmp);LL sum = 0;for(int i = 1;i <= k;++i){sum += a[i].c;if(sum > m){printf("%d\n",i - 1);return 0;   }q.push(mk(a[i].p - a[i].c,i));}ans = k;sort(a + k + 1,a + n + 1,cmpp); for(int i = k + 1;i <= n;++i){pii x = q.top();if(a[x.se].c + a[i].p > a[x.se].p + a[i].c){ans++;sum = sum - a[x.se].c;sum = sum + a[i].c + a[x.se].p;q.pop();q.push(mk(a[i].p - a[i].c,i));}else{ans++;sum += a[i].p;  }if(sum > m) {printf("%d\n",ans - 1);return 0;}}printf("%lld\n",n);return 0;
}

转载于:https://www.cnblogs.com/wyxdrqc/p/11400603.html

LuoguP3045牛券Cow Coupons相关推荐

  1. [USACO12FEB]牛券Cow Coupons

    嘟嘟嘟 这其实是一道贪心题,而不是dp. 首先我们贪心的取有优惠券中价值最小的,并把这些东西都放在优先队列里,然后看[k + 1, n]中,有些东西使用了优惠券减的价钱是否比[1, k]中用了优惠券的 ...

  2. 专题突破之反悔贪心——建筑抢修,Cow Coupons G, Voting (Hard Version),Cardboard Box

    文章目录 [JSOI2007]建筑抢修 [USACO12FEB]Cow Coupons G CF1251E2 Voting (Hard Version) CF436E Cardboard Box [J ...

  3. 洛谷 P3014 [USACO11FEB]牛线Cow Line

    P3014 [USACO11FEB]牛线Cow Line 题目背景 征求翻译.如果你能提供翻译或者题意简述,请直接发讨论,感谢你的贡献. 题目描述 The N (1 <= N <= 20) ...

  4. 洛谷 P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题目描述 The cows are out exercising their hooves again! There are N ...

  5. P2901 [USACO08MAR]牛慢跑Cow Jogging

    题目描述  传送门 Bessie has taken heed of the evils of sloth and has decided to get fit by jogging from the ...

  6. linux内核通用提权漏洞expliot 脏牛Dirty COW

    0x01 漏洞简介 Linux内核在处理内存写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射.一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,有可 ...

  7. [USACO07NOV]牛继电器Cow Relays

    题目描述 给出一张无向连通图,求S到E经过k条边的最短路. 输入输出样例 输入样例#1: 2 6 6 4 11 4 6 4 4 8 8 4 9 6 6 8 2 6 9 3 8 9 输出样例#1: 10 ...

  8. P2419 [USACO08JAN]牛大赛Cow Contest

    Floyd不仅能求出最短路,还能利用或运算,与运算判断两点是否连通. 小范围数据,Floyd经常是很好的思路! 代码! #include<cstdio> #include<iostr ...

  9. [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays

    https://www.luogu.org/problemnew/show/P2886 给定无向连通图,求经过k条边,s到t的最短路 Floyd形式的矩阵乘法,同样满足结合律,所以可以进行快速幂. 离 ...

  10. [USACO08JAN]牛大赛Cow Contest

    传送门:https://www.luogu.org/problemnew/show/P2419 这道题拿到之后想了很多种做法,贪心....以及建树...然后....从入度为零的点求最短路....然鹅好 ...

最新文章

  1. 互联网Scratch编程趣味课:不插电编程和计算机对话[图]
  2. 各种好用的代码生成器(C#)
  3. kafka 可视化工具_两小时带你轻松实战SpringBoot+kafka+ELK分布式日志收集
  4. springcloud 返回json
  5. Spring5参考指南:Environment
  6. Cobertura和Maven:集成和单元测试的代码覆盖率
  7. 世界上最难的视觉图_世界上最长的蛇有多长?四川惊现55米洪荒巨蟒(图)
  8. Process插件:typecho加载页面进度条插件
  9. ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建
  10. Nginx配置共用80端口|端口转发端口映射
  11. iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)
  12. 《Android和PHP开发最佳实践》一第3章 PHP开发准备
  13. 【169天】黑马程序员27天视频学习笔记【Day08-上】
  14. win32API中文参考手册
  15. (已解决)windows2020卸载office2013(安装程序包语言不受系统支持)
  16. C语言程序设计笔记(浙大翁恺版) 第九周:指针
  17. 3 FPGA时序约束理论篇之IO约束
  18. 抛物型偏微分方程的Crank-Nicolson 方法; Richardson 外推法;紧差分法
  19. 为什么我不建议你轻易入上位机的“坑”?
  20. 微信公众号获取openid(java后端+html实现)

热门文章

  1. 使用VC做一个简单的UI界面对话框
  2. 2021-3测试通过:eclipse安装svn插件
  3. 从精度看CPU线程:实验室与量产的差距
  4. 使用Rufus制作安装U盘报错,使用UltraISO成功
  5. 更换介质:请把标有 “Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57” 的盘片插入驱动器“
  6. NVIDIA H264解码是硬件电路还是CUDA
  7. 管理感悟:区分话的难听与对错
  8. java 代码段 执行超时 抛异常_深入理解Java线程状态
  9. activiti idea 请假流程_使用idea进行activiti工作流开发入门学习
  10. python网络编程第三版网盘_Python网络编程(socketserver、TFTP云盘、HTTPServer服务器模型)...