题意:

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

                                                                        Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)

                                                                        Total Submission(s): 1539 Accepted Submission(s): 525


Problem Description
  湫湫减肥

  越减越肥!

  

  最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏。

  游戏规则很简单,用箭杀死免子即可。

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

  假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币。

Input
输入数据有多组,每组数据有四行;

第一行有两个整数N,M(1 <= N, M <= 100000),分别表示兔子的个数和箭的种类;

第二行有N个正整数,分别表示兔子的血量Bi(1 <= i <= N);

第三行有M个正整数,表示每把箭所能造成的伤害值Di(1 <= i <= M);

第四行有M个正整数,表示每把箭需要花费的QQ币Pi(1 <= i <= M)。

特别说明:

1、当箭的伤害值大于等于兔子的血量时,就能将兔子杀死;

2、血量Bi,箭的伤害值Di,箭的价格Pi,均小于等于100000。

Output
如果不能杀死所有兔子,请输出”No”,否则,请输出最少的QQ币数,每组输出一行。

Sample Input

3 3
1 2 3
2 3 4
1 2 3
3 4
1 2 3
1 2 3 4
1 2 3 1

Sample Output

6
4

思路:

       这个题目比较好想,显然是个小贪心,首先我们先出路血最多的兔子,对于血最多的兔子我们只要在能杀死他的剑里面选一个最便宜的就行了,然后在杀血第二多的,以此类推,如果发现杀某一个兔子的时候没有剑可用了,那么就直接on了,先选血多的兔子是为了防止选择少的时候选择了价钱少而忘记了首先要保证所有兔子被杀死,直接模拟会TLE的,我用的优先队列(别的容器什么的也可以只要别N^2就行了),先把所有的兔子和剑放在一起排序,遇到剑就把他的攻击存进队列里,遇到兔子就取一个之前qq币最少的,不用考虑是否能杀死,排序后后面的兔子肯定会被前面的剑杀死,还多就是注意一下数据的大小,一开始开了个int的ans,wa了一次。


#include<stdio.h>
#include<queue>
#include<algorithm> #define N 222222
using namespace std; typedef struct NODE
{
__int64
hp ,cost;
}
NODE; typedef struct A
{
__int64
x;
friend bool operator < (
A x ,A y)
{
return
x.x > y.x;
}
}
A; A xin ,tou; NODE node[N]; bool camp(NODE a ,NODE b)
{
return
a.hp > b.hp || a.hp == b.hp && a.cost > b.cost;
} int main ()
{
int
n ,m ,i;
__int64
num;
while(~
scanf("%d %d" ,&n ,&m))
{
for(
i = 1 ;i <= n ;i ++)
{

scanf("%I64d" ,&node[i].hp);
node[i].cost = -1;
}
for(
i = 1 ;i <= m ;i ++)
scanf("%I64d" ,&node[i+n].hp);
for(
i = 1 ;i <= m ;i ++)
scanf("%I64d" ,&node[i+n].cost);
sort(node + 1 ,node + n + m + 1 ,camp);
priority_queue<A>q;
__int64
ans = 0;
for(
i = 1 ;i <= n + m ;i ++)
{
if(
node[i].cost != -1)
{

xin.x = node[i].cost;
q.push(xin);
}
else
{
if(
q.empty())
{

ans = -1;
break;
}

tou = q.top();
q.pop();
ans += tou.x;
}
}

ans == -1 ? puts("No") : printf("%I64d\n" ,ans);
}
return
0;
}

hdu4544 优先队列(小贪心)的更多相关文章

  1. Canada Cup 2016 D. Contest Balloons 好题。优先队列 + 简单贪心

    http://codeforces.com/contest/725/problem/D 这题一看就是贪心的了,w - t最小的那个,肯定是优先打死. 但是一直都不会写,为什么呢,因为这个太像二分答案了 ...

  2. [CF752D]Santa Claus and a Palindrome(优先队列,贪心乱搞)

    题目链接:http://codeforces.com/contest/752/problem/D 题意:给长度为k的n个字符串,每一个字符串有权值,求构造一个大回文串.使得权值最大. 因为字符串长度都 ...

  3. UVa 11134 - Fabled Rooks 优先队列,贪心 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  4. 20181009noip HZ EZ 两校联考trade(优先队列,贪心)

    题面戳这里 思路: 裸的,贪心... 考场上写了一个数据分治(70ptsDP,30pts线段树优化贪心,GG了后30分) 这道题其实很简单的 我们看图: 我们在A时刻买一个东西,在B时刻卖出去,我们可 ...

  5. 洛谷 P1484 种树(优先队列,贪心,链表)

    传送门 解题思路 第一眼的贪心策略:每次都选最大的. 但是——不正确! 因为选了第i个树,第i-1和i-1棵树就不能选了.所以,要有一个反悔操作. 选了第i个后,我们就把a[i]的值更新为a[l[i] ...

  6. hdu4932 小贪心

    题意:      给了一些处在x轴上的点,要求我们用长度相等的线段覆盖所有点,线段和线段之间不能重叠,问线段最长可以使多长. 思路:       一开始一直在想二分,哎!感觉这个题目很容易就往二分上去 ...

  7. POJ 2431 Expedition(优先队列、贪心)

    题目链接: 传送门 Expedition Time Limit: 1000MS     Memory Limit: 65536K 题目描述 驾驶一辆卡车行驶L单位距离.最开始有P单位的汽油.卡车每开1 ...

  8. sgu548 Dragons and Princesses   贪心+优先队列

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=548 题目意思: 有一个骑士,要经过n个房间,开始在第一个房间,每个房间里面有龙或者 ...

  9. 【ZZ】堆和堆的应用:堆排序和优先队列

    堆和堆的应用:堆排序和优先队列 https://mp.weixin.qq.com/s/dM8IHEN95IvzQaUKH5zVXw 堆和堆的应用:堆排序和优先队列 2018-02-27 算法与数据结构 ...

随机推荐

  1. MySQL时间戳unix_timestamp

    函数:FROM_UNIXTIME作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示.语法:FROM_UNIXTIME(unix_timestamp, ...

  2. Java 多线程 02

    多线程·线程间通信 和 GUI 单例设计模式 * A:单例设计模式 * 保证类在内存中只有一个对象 * B:如何保证 * a:控制类的创建,不让其他类来创建泵类的对象,私有化构造方法 * b:在本类中 ...

  3. 手把手教你集成华为机器学习服务(ML Kit)人脸检测功能

    当给自己拍一张美美的自拍照时,却发现照片中自己的脸不够瘦.眼睛不够大.表情不够丰富可爱-如果此时能够一键美颜瘦脸并且添加可爱的贴纸的话,是不是很棒? 当家里的小孩观看iPad屏幕时间过长或者眼睛离屏幕 ...

  4. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)

    SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 系列 Snuba:Sentr ...

  5. 如何安装jenkins并简单的使用

    如何安装jenkins并使用 一.jenkins 简介: Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括 : 1.持续的软件版本发布/测试项目: 2.监控外部调用 ...

  6. P3387 【模板】缩点 题解 (Tarjan)

    题目链接 P3387 [模板]缩点 解题思路 这几天搞图论,好有趣hhh,多写几篇博客. 上次学\(Tarjan\)求割点,这次缩点. 思路大概是多一个栈和染色的步骤,每次\(Tarjan\)的时候把 ...

  7. MySQL语法基础

    一.通用语法 1.MySQL数据库的SQL语句不区分大小写 2.可以用/**/完成注释 3.常用数据类型 类型 描述 int 整型 double 浮点型 varchar 字符串型 date 日期类型, ...

  8. Spring与Mybatis整合配置

    Mybatis核心配置文件: 配置文件内可以不写内容 <?xml version="1.0" encoding="UTF-8" ?> <!DO ...

  9. 微信开发者工具导入 wepy 项目“app.json 未找到”报错解决方法

    版本信息: 微信开发者工具:1.03.2101150 wepy:2.0 wepy/cli:6.14.8 问题描述 按照 wepy 文档中的步骤新建项目: $ npm install @wepy/cli ...

  10. TypeError: 'str' object does not support item assignment Python常见错误

    1.string是一种不可变的数据类型 2.尝试使用 range()创建整数列 有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式. 需要记住 range() 返回的 ...