原题: http://acm.hdu.edu.cn/showproblem.php?pid=4544

//hdu 4544
//思路:为每一只兔子找能够杀死自己并且花费Q币最少的箭,关键在于不要超时,详细过程:
//     每一只兔子按血量从大到小排序,每一把箭按攻击值从大到小排序。接下来for循环,为每一只兔子找箭,
//     遍历每一只兔子,查找攻击值大于兔子血量的箭,把这些箭的Q币压入优先队列
//     能够杀死上一只兔子的箭一定能杀死下一只兔子,因为兔子的血量是从大到小排列的,把箭都压进队列后,
//     每次取优先队列的头(即Q币最小)的箭即可,但如果队列为空,表示没有一把剑能杀死当前的兔子,则跳出循环,输出No,有则继续遍历,直到遍历完所有的兔子。
//优先队列可以,multiset也可以,使用队列要注意自己重写一个cmp,用greater<int>会报编译错误。
//数据可能达到100亿,用long long
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
int rab[100001];
struct J
{int di;int pi;
}j[100001];
int cmp1(int a,int b)//按血量从大到小排序
{return a>b;
}
int cmp2(J a,J b)//按伤害值由大到小排序
{return a.di>b.di;
}
struct cmp   //队列要用到的cmp结构体
{bool operator ()(int a,int b){return a>b;}
};
int main()
{int n,m;while(~scanf("%d %d",&n,&m)){for(int i=0;i<n;i++){scanf("%d",&rab[i]);//兔子 }for(int i=0;i<m;i++)//箭 {scanf("%d",&j[i].di);}for(int i=0;i<m;i++){scanf("%d",&j[i].pi);}if(n>m){//兔子数目大于箭的数目,不能杀死全部兔子 printf("No\n");continue;} sort(rab,rab+n,cmp1); //排好序 sort(j,j+m,cmp2);priority_queue<int,vector<int>,cmp>q1;//存放q币优先队列,由小到大 int k=0; //箭的下标 ll money=0;int flag=1;//是否能够消灭全部兔子,flag=1能,flag=0不能 for(int i=0;i<n;i++)//遍历每一只兔子 {int di=rab[i];//当前兔子的血量 for(;k<m;k++){if(j[k].di>=di)//找那些可以杀死兔子的,把q币压入队列 {q1.push(j[k].pi);}else{break;}}if(q1.size()==0){//如果没有一支箭可以杀死这只兔子,flag=0,提前结束循环 flag=0;break;}else{money=money+q1.top();q1.pop();}} if(flag){ //可以杀死全部兔子 printf("%lld\n",money);}else{  //不能杀死全部兔子 printf("No\n");}} return 0;
}   //AC

有一道类似的题可以巩固加深 :http://acm.hdu.edu.cn/showproblem.php?pid=4864

hdu 4544 湫湫系列故事——消灭兔子相关推荐

  1. HDU 4544 湫湫系列故事——消灭兔子 (贪心+优先队列)

    题目链接:HDU 4544 题面: 湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K ...

  2. HDU4544 湫湫系列故事——消灭兔子

    湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  3. 杭电OJ4544 湫湫系列故事——消灭兔子(优先队列过)

    湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  4. HDU-4544-湫湫系列故事——消灭兔子--贪心+优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4544 Problem Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷 ...

  5. 湫湫系列故事——消灭兔子

    湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对 ...

  6. 湫湫系列故事——消灭兔子(优先队列)

    Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种 ...

  7. HDU4544 湫湫系列故事――消灭兔子

    HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...

  8. HDU - 4544 湫湫系列故事——消灭兔子 贪心+优先队列

    1.题意: 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买.  假设每种箭只能使 ...

  9. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 1 //#pragma ...

最新文章

  1. 两只小熊队高级软件工程第七次作业敏捷冲刺7
  2. confluencejira集成_集成confluence与jira
  3. my02_Atlas mysql5.7安装配置
  4. ML之RS:基于用户的CF+LFM实现的推荐系统(基于相关度较高的用户实现电影推荐)
  5. Python (五) 高级特性
  6. linux开发板推荐_【新品发布】WiFi开发板XW-01-Kit,超低功耗,冷启快联,智能门锁首选!...
  7. java9 堆外内存_java堆外内存泄漏排查
  8. python3 多继承搜索__init__方法的两种策略
  9. PLSQL中文显示乱码(问号)
  10. 二分法c语言代码(递归、迭代)
  11. 错误记录(一)Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister报错解决办法
  12. Java设计模式透析之 —— 组合(Composite)
  13. 国家缩写大全 mysql_所有国家英文缩写
  14. 如何在淘宝上利用信息差赚钱
  15. 美团前端面试题(附答案)
  16. Youtube更改视频原始语言
  17. 常用URLscheme整理+不同场景下打开URLscheme的方法
  18. 每日新闻丨​iPhone11成败关系全球众多供应商下一张饭票
  19. Excel行高列宽使用单位为磅(1cm=28.6磅)
  20. AT2565 Chocolate Bar 洛谷

热门文章

  1. FL studio20.8最新中文版本安装下载图文教程
  2. 网络安全基础:公钥密码体制
  3. python之去掉字符串中空格的方法
  4. java gif图片_java 如何生成动态的gif图片
  5. Linux系统中的超级用户,普通用户,特殊用户(特殊用户)3种类型
  6. [重要]招募计划 - 积微速成报名结果
  7. 远端rlogin服务
  8. Java解决上台阶问题
  9. nohup command > out.file 2>1 命令详解
  10. Android手机通用电池校正方法