题意:

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

                                                                        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. Linux操作php.ini文件

    有时你使用的是别人搭建好的环境,不知道php.ini在哪里,或者好久没有修改配置了,已经忘记了路径在哪,所以在操作文件之前,得先要找到.ini路径. 找php.ini 方式一 $ php -i | g ...

  2. 利用CORDIC算法计算三角函数

    这里主要先介绍如何利用CORDIC算法计算固定角度\(\phi\)的\(cos(\phi)\).\(sin(\phi)\)值.参考了这两篇文章[1].[2]. 一般利用MATLAB计算三角函数时,用\ ...

  3. CCF(数据中心):最小生成树+kruskal算法

    数据中心 201812-4 这里就是最小生成树的应用 #include<iostream> #include<cstdio> #include<algorithm> ...

  4. javaweb遇到的报错及解决方式

    javaweb报错问题以及解决方案 问题(报错信息):Application Server was not connected before run configuration stop, reaso ...

  5. 文件包含-phpinfo()

    我也是听朋友说有这个姿势的,github有集成好的环境 先讲一下利用phpinfo上传文件,然后在文件包含的原理: 在给PHP发送POST数据包时,如果数据包里包含文件区块,无论访问的代码中是否有处理 ...

  6. VSCode添加用户代码片段,自定义用户代码片段

    在使用VScode开发中经常会有一些重复使用的代码块,复制粘贴也很麻烦,这时可以在VScode中添加用户代码片段,输入简写即可快捷输入. VScode中添加用户自定义代码片段很简单. 1.在VScod ...

  7. ajax传数组后台GO语言接收

    js代码如下: function PostHandle(url,data,callback) { $.ajax({ type: "Post", url:url, data:data ...

  8. 1.认识numpy的数组

    认识ndarray --ndarray:用于存储单一数据类型的多维数组 ndarray基础属性的认识 import numpy as np #将numpy简写为np方便调用 1.通过以下实例来认识ar ...

  9. SpringBoot自动配置探究

    @SpringBootApplication @SpringBootApplication表示SpringBoot应用,标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就 ...

  10. 1、Spring教程之Spring概述

    1.Spring概述 简介 Spring : 春天 --->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. 2004年3月24 ...