1.题意:

箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买。 
假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币。

2.分析:

这里注意每只剑只能用一次。

对于每只兔子,肯定是在所有能杀死他的剑里面选择花费最小的那支,但是先杀哪只兔子呢?

肯定先杀血量高的兔子,因为血量高的兔子选择更为局限,要先满足他

这里首先把兔子和剑一起排序,按照生命值排序,当剑和兔子生命值相同时,剑在前面,因为要先选剑来杀兔子

当剑生命值相同时,先选择花费小的

这样利用一起排序就能将兔子和剑一起排起来,能杀兔子的剑自然在他前面

(1)如果是剑,存入另一个优先队列,队首为花费最小,表示这里存储这所有比后面兔子都大的剑,任意一把都能杀死后面兔子,所以只需要取最小花费的即可。

(2)如果是兔子,则需要从剑堆里面选择队首剑(既能杀死他而且是花费最小的),若剑堆为空,则说明没有剑能杀死这只兔子

3.代码:

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 7;
typedef long long int LL;
struct Node{int HP,QQ,flag;bool operator <(const Node &another)const{if(HP==another.HP)return QQ<another.QQ;else return HP <another.HP;}Node(int a,int b,int c):HP(a),QQ(b),flag(c) {}
};
struct Node2{int HP,QQ;bool operator <(const Node2 &another)const{if(QQ==another.QQ)return HP>another.HP;else return QQ >another.QQ;}Node2(int a,int b):HP(a),QQ(b) {}
};
int n,m,D[maxn];
int main()
{while(scanf("%d%d",&n,&m)!=EOF){priority_queue<Node> que;priority_queue<Node2>queW;for(int i = 0;i<n;i++){int p;scanf("%d",&p);que.push(Node(p,0,1));}for(int i = 0;i<m;i++){scanf("%d",&D[i]);}for(int i = 0;i<m;i++){int p;scanf("%d",&p);que.push(Node(D[i],p,-1));}int len = n;LL sum = 0;while(!que.empty()){if(len==0)break;Node node = que.top();// cout<<node.HP<<" "<<node.QQ<<" "<<node.flag<<endl;que.pop();if(node.flag==-1)queW.push(Node2(node.HP,node.QQ));else{if(queW.empty())break;else{int num = queW.top().HP;int cost = queW.top().QQ;len--;sum+=cost;queW.pop();}}}if(len==0)printf("%lld\n",sum);else printf("No\n");}return 0;
}

4.解题方向

(1)按照什么标准排序:区间调度问题,持续时间最长优先类的最多问题

(2)以什么为标准作为枚举基准:有时候换一个对象重心判断另一个更简单

(3)一起排序:若两类有共同处,一起排序能更直观的将对象关系呈现出来

HDU - 4544 湫湫系列故事——消灭兔子 贪心+优先队列相关推荐

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

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

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

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

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

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

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

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

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

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

  6. hdu 4544 湫湫系列故事——消灭兔子

    原题: http://acm.hdu.edu.cn/showproblem.php?pid=4544 //hdu 4544 //思路:为每一只兔子找能够杀死自己并且花费Q币最少的箭,关键在于不要超时, ...

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

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

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

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

  9. 1191 消灭兔子(贪心+优先队列)

    1191 消灭兔子 题目来源: 2013腾讯马拉松赛第三场 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N只兔子,每只有一个血量B[i],需要用箭杀死免子.有 ...

最新文章

  1. 无法启动python怎么办_解决python写的windows服务不能启动的问题
  2. 开源监控系统 Prometheus 入门
  3. Java多线程知识小抄集(一)
  4. 如何在Angular单元测试里,对class protected方法进行测试
  5. python 当前目录_virtualenvwrapper打造多版本Python环境
  6. php极光推送教程,laravel框架使用极光推送消息操作示例
  7. ios batchRequest
  8. 新版网易云课堂视频真实地址分析
  9. 在线UTF-8转换成GBK工具
  10. NOIP 2016 年普及组初赛试题整理
  11. word文件损坏打不开如何修复?
  12. 中国紧急警报系统(EAS)行业发展现状与前景动态预测报告2022-2027
  13. IDEA插件下载地址
  14. vsphere服务器虚拟化的优点,vmware虚拟化优势_vmware开启虚拟化
  15. 小程序源码:独家全新娱乐性超高的喝酒神器
  16. [转]编写简单的中文分词程序
  17. STM32驱动陀螺仪MPU6050的应用实例
  18. java画图板之平面山水画(一)
  19. 《心流》| 写作反熵
  20. 【Copula】基于二元Frank-Copula函数的风光出力场景生成方法【考虑风光出力的不确定性和相关性】(Matlab代码实现)

热门文章

  1. 市场调研报告-全球与中国熔接器市场现状及未来发展趋势
  2. 使用python的zipfile模块巧解word批量生成问题
  3. android 新闻功能列表,news: 用Android基本技术实现的新闻App
  4. Deeplearning for NLP (简介)
  5. 计算几何基础——【点积和叉积的用处】
  6. 基于卷积神经网络的高光谱分类(1D、2D、3D-CNN)
  7. 【机器学习基础】线性基函数模型
  8. Bernstein基函数及其性质 matlab实现
  9. open falcon mysql参数_open-falcon 监控MySQL及自定义监控指标
  10. 排序算法之归并排序及Java实现