HDU - 4544 湫湫系列故事——消灭兔子 贪心+优先队列
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 湫湫系列故事——消灭兔子 贪心+优先队列相关推荐
- HDU-4544-湫湫系列故事——消灭兔子--贪心+优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4544 Problem Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷 ...
- 杭电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币最少的箭,关键在于不要超时, ...
- 湫湫系列故事——消灭兔子
湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对 ...
- HDU4544 湫湫系列故事――消灭兔子
HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...
- 1191 消灭兔子(贪心+优先队列)
1191 消灭兔子 题目来源: 2013腾讯马拉松赛第三场 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N只兔子,每只有一个血量B[i],需要用箭杀死免子.有 ...
最新文章
- 无法启动python怎么办_解决python写的windows服务不能启动的问题
- 开源监控系统 Prometheus 入门
- Java多线程知识小抄集(一)
- 如何在Angular单元测试里,对class protected方法进行测试
- python 当前目录_virtualenvwrapper打造多版本Python环境
- php极光推送教程,laravel框架使用极光推送消息操作示例
- ios batchRequest
- 新版网易云课堂视频真实地址分析
- 在线UTF-8转换成GBK工具
- NOIP 2016 年普及组初赛试题整理
- word文件损坏打不开如何修复?
- 中国紧急警报系统(EAS)行业发展现状与前景动态预测报告2022-2027
- IDEA插件下载地址
- vsphere服务器虚拟化的优点,vmware虚拟化优势_vmware开启虚拟化
- 小程序源码:独家全新娱乐性超高的喝酒神器
- [转]编写简单的中文分词程序
- STM32驱动陀螺仪MPU6050的应用实例
- java画图板之平面山水画(一)
- 《心流》| 写作反熵
- 【Copula】基于二元Frank-Copula函数的风光出力场景生成方法【考虑风光出力的不确定性和相关性】(Matlab代码实现)
热门文章
- 市场调研报告-全球与中国熔接器市场现状及未来发展趋势
- 使用python的zipfile模块巧解word批量生成问题
- android 新闻功能列表,news: 用Android基本技术实现的新闻App
- Deeplearning for NLP (简介)
- 计算几何基础——【点积和叉积的用处】
- 基于卷积神经网络的高光谱分类(1D、2D、3D-CNN)
- 【机器学习基础】线性基函数模型
- Bernstein基函数及其性质 matlab实现
- open falcon mysql参数_open-falcon 监控MySQL及自定义监控指标
- 排序算法之归并排序及Java实现