题意:

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

                                                                        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. c++ vector对象

    下面随笔讲解c++ vector对象. vector对象 为什么需要vector? 封装任何类型的动态数组,自动创建和删除. 数组下标越界检查. 封装的如ArrayOfPoints也提供了类似功能,但 ...

  2. 内省详解(Introspector/BeanInfo/MethodDescriptor/PropertyDescriptor)

    内省(Introspector)概念 ​ 内省Introspector 是Java提供的操作 JavaBean 的 API,用来访问某个属性的 getter/setter 方法.对于一个标准的 Jav ...

  3. 如何选择 WebClient,HttpClient,HttpWebRequest

    当我们在用 .NET 调用 RestAPI 时通常有三种选择,分别为:WebClient, HttpWebRequest,HttpClient,这篇文章我们将会讨论如何使用这三种方式去调用 RestA ...

  4. Ubuntu更换python默认版本

    设置python版本: 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 2 sudo ...

  5. 【python+selenium的web自动化】- 元素的常用操作详解(二)

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html ​ 本篇主要内容:1.鼠标 ...

  6. 你想知道的 std::vector::push_back 和 std::vector::emplace_back

    引言 C++ 11 后,标准库容器 std::vector 包含了成员函数 emplace 和 emplace_back.emplace 在容器指定位置插入元素,emplace_back 在容器末尾添 ...

  7. MySQL入门(7)——表数据的增、删、改

    MySQL入门(7)--表数据的增.删.改 插入数据 使用INSERT···VALUES语句插入数据 INSERT语句最常用的格式是INSERT···VALUES: INSERT [LOW_PRIOR ...

  8. python网络编程--TCP客户端的开发

    #导入socket模块 2 import socket 3 #参数说明 4 """ 5 socket类的介绍 6 创建客户端socket对象 7 socket.socke ...

  9. IPFS矿机封装原理解释

    近期无论是从媒体.新闻的高度曝光,还是市场拓展的覆盖度来看,IPFS 俨然成为今年最值得关注的行业话题与入场趋势.对于许多刚了解 IPFS 的小白来说,矿机的「封装」.「有效算力」和「原值算力」这些概 ...

  10. 使用MyBatis的步骤

    1.创建空的Java工程,安装MyBatis依赖 <?xml version="1.0" encoding="UTF-8"?> <projec ...