1191 消灭兔子(贪心+优先队列)
第1行:两个整数N,M,中间用空格分隔(1 <= N, M <= 50000),分别表示兔子的个数和箭的种类。 第2 - N + 1行:每行1个正整数(共N行),表示兔子的血量B[i](1 <= B[i] <= 100000)。 第N + 2 - N + M + 1行:每行2个正整数(共M行),中间用空格分隔,表示箭所能造成的伤害值D[i],和需要花费的Q币P[i](1 <= D[i], P[i] <= 100000)。
输出最少需要多少Q币才能消灭所有的兔子。如果不能杀死所有兔子,请输出"No Solution"。
3 3 1 2 3 2 1 3 2 4 3
6 一只兔子只能射一箭,一下子就简单了,将兔子按血量降序排序,将箭按伤害降序排序,然后用个优先队列贪心选择最小价值的箭杀每只兔子ok,
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 #define MOD 1000000007 6 #define MX 50005 7 struct Arrow 8 { 9 int d, p; 10 bool operator < (const Arrow &b)const{ 11 return p>b.p; 12 } 13 }arr[MX]; 14 15 int n,m; 16 priority_queue<Arrow> Q; 17 int tu[MX]; 18 19 bool cmp1(int &a,int &b){ 20 return a>b; 21 } 22 bool cmp2(Arrow &a,Arrow &b){ 23 return a.d>b.d; 24 } 25 26 int main() 27 { 28 scanf("%d%d",&n,&m); 29 for (int i=1;i<=n;i++) 30 scanf("%d",&tu[i]); 31 sort(tu+1,tu+1+n,cmp1); 32 for (int i=1;i<=m;i++) 33 scanf("%d%d",&arr[i].d,&arr[i].p); 34 sort(arr+1,arr+1+m,cmp2); 35 36 int pos =1; // 多少箭入队 37 int ok=1; 38 LL ans=0; 39 while (pos<=m) 40 { 41 if (arr[pos].d>=tu[1]) 42 { 43 Q.push(arr[pos]); 44 pos++; 45 } 46 else break; 47 } 48 for (int i=1;i<=n;i++) 49 { 50 if (i>1&&tu[i]!=tu[i-1]) 51 { 52 while (pos<=m) 53 { 54 if (arr[pos].d>=tu[i]) 55 { 56 Q.push(arr[pos]); 57 pos++; 58 } 59 else break; 60 } 61 } 62 if (Q.empty()) 63 { 64 ok=0; 65 break; 66 } 67 ans+=Q.top().p;; 68 Q.pop(); 69 } 70 if (ok) 71 printf("%lld\n",ans); 72 else 73 printf("No Solution\n"); 74 return 0; 75 }
View Code
转载于:https://www.cnblogs.com/haoabcd2010/p/7608809.html
1191 消灭兔子(贪心+优先队列)相关推荐
- HDU - 4544 湫湫系列故事——消灭兔子 贪心+优先队列
1.题意: 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买. 假设每种箭只能使 ...
- HDU-4544-湫湫系列故事——消灭兔子--贪心+优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4544 Problem Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷 ...
- 1191 消灭兔子(51nod)
1191 消灭兔子 题目描述:有N只兔子,每只有一个血量B[i],需要用箭杀死兔子.有M种不同类型的箭可以选择,每种箭对兔子的伤害值分别为D[i],价格为P[i](1 <= i <= M) ...
- 杭电OJ4544 湫湫系列故事——消灭兔子(优先队列过)
湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- 湫湫系列故事——消灭兔子(优先队列)
Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种 ...
- HDU 4544 湫湫系列故事——消灭兔子 (贪心+优先队列)
题目链接:HDU 4544 题面: 湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K ...
- HDU4544 湫湫系列故事——消灭兔子
湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 4544 湫湫系列故事——消灭兔子
原题: http://acm.hdu.edu.cn/showproblem.php?pid=4544 //hdu 4544 //思路:为每一只兔子找能够杀死自己并且花费Q币最少的箭,关键在于不要超时, ...
- HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解
思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...
最新文章
- Chrome开发者工具关于网络请求的一个隐藏技能
- BZOJ2055 80人环游世界
- react中高阶组件
- python星期计算_Python简单计算给定某一年的某一天是星期几示例
- PHP Storm Built In Server Doesn't Recognize mod_rewrite
- 每天5分钟玩转容器技术 ---- 系列文章
- tpshop防止sql注入补丁
- java jdk 序列化_JDK 11:Java序列化的终结开始了吗?
- python excel 添加数据_使用pyexcel python在电子表格中添加行数据
- 字符串API中的split,substr,substring
- [Lydsy1805月赛]对称数 BZOJ5361
- 【渝粤教育】国家开放大学2019年春季 0177-22T电机学(二) 参考试题
- Vue项目关闭语法检查
- 微信与微博的粗略比较(产品设计)
- 反思|Android 事件分发机制的设计与实现
- 每天3个面试题精研 - 前端 - 第4-6天
- MicroBlaze系列教程(1):AXI_GPIO的使用
- 【HEVC简介】CTU、CU、PU、TU结构
- VSCode查看和编辑远程服务器的代码
- P03:路由基础和基本跳转
热门文章
- java 下载工具_java_java编写Http服务器下载工具,这个工具比较简单,用于配合 - phpStudy...
- java哈夫曼_用 JAVA 实现哈夫曼树(Huffman Tree)
- 学数学但是不会计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...
- 曼大和华威计算机科学预科哪个好,华威预科申请曼彻斯特本科
- python预测实例教程_手把手教你用Python库Keras做预测(附代码)-阿里云开发者社区...
- mysql自动填充_Mysql自动填充测试数据
- oracle12 共享内存不存在,DBA警世录:Oracle的共享内存段
- java反编译工具_推荐Java反编译工具luyten、jd-gui
- python threading.Semaphore
- StereoPannerNode