首先先看一下这道题的英文原版...

好吧,没看懂...

大体意思就是:

有一条n个头的恶龙,现在有m个骑士可以雇佣去杀死他,一个能力值为x的勇士可以砍掉直径不超过x的头,而且需要支付x个金币。如何雇佣才能砍掉所有的头且支付最少的金币,注意一个勇士只能砍一个头,也只能被雇佣一次。

输入包含多组数据,每组数据第一行为正整数n,m(1<=n,m<=20000),以下n行每行为一个整数,就是恶龙的头的直径,以下m行每行为一个整数,就是每个骑士的能力值。输入结束标志位m=n=0。

输出格式对于每组数据输出最少花费,如果无解,则输出"Loowater is doomed!"。

SAMPLE INPUT

2 3

5

4

7

8

4

2 1

5

5

10

0 0

SAMPLE OUTPUT

11

Loowater is doomed!

嗯...最小的花费,肯定会想到贪心的思想...当然这道题里有轻微的贪心思想。

思路:

将龙的头按照直径的长短从小到大排序,将勇士的能力值从小到大排序(为了不浪费勇士的能力值),然后进行比较...

鬼畜一——cur:

注意我们要记录龙已经被砍掉几个头,并且下一个要砍哪一个,所以用cur来记录,并且最后cur要和n进行比较,看看是否将龙所有的头都砍完了..

鬼畜二——输入:

输入与平常不同,只有输入到 0 0 时才会停止,所以要用一个while循环嵌套所有

大体过程:

输入 ------>  贪心思想的排序 -------->  比较  --------> 是否能将所有的头砍去 ---------> 根据情况输出

下面是AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4
 5 using namespace std;
 6
 7
 8 const int maxn = 20005;
 9
10 int j[maxn], d[maxn];
11 //j数组表示骑士的能力值
12 //d数组表示龙头的直径
13
14 int main(){
15     int n, m;
16     while(scanf("%d%d", &n, &m) == 2 && n && m){//while循环进行输入,n,m不得为0
17         for(int i = 1; i <= n; i++) scanf("%d", &d[i]);
18         for(int k = 1; k <= m; k++) scanf("%d", &j[k]);
19         sort(d+1, d+n+1); //排序
20         sort(j+1, j+m+1);
21         int cost = 0, cur = 0;//cost为最小花费,cur为鬼畜一
22         for(int i = 1; i <= m; i++){
23             if(j[i] >= d[cur]){//进行比较
24                 cost += j[i];
25                 if(++cur == n) break;//将龙头全砍掉
26             }
27         }
28         if(cur < n) printf("Loowater is doomed!\n");//没砍完龙头
29         else printf("%d\n", cost);
30     }
31     return 0;
32 }

转载于:https://www.cnblogs.com/New-ljx/p/10575107.html

UVa 11292 勇者斗恶龙(The Dragon of Loowater)相关推荐

  1. 勇者斗恶龙(The Dragon of Loowater, UVa 11292)

    勇者斗恶龙(改编)(The Dragon of Loowater, UVa 11292) 你的王国里有一条 n 个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村 里有 m 个骑士可以雇佣,一个 ...

  2. acm的STL容器之队列篇 及 UVa 11292 - Dragon of Loowater 小根堆解法(贪心算法)

    2018-07-17 优先队列,即Priority Queues 1.简单介绍一下队列(介绍功能,不作分析) C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构. 1.back ...

  3. 贪心/思维题 UVA 11292 The Dragon of Loowater

    题目传送门 1 /* 2 题意:n个头,m个士兵,问能否砍掉n个头 3 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 4 */ 5 #include <cstdio> 6 #i ...

  4. 勇者斗恶龙UVa 11292

    例题1 勇者斗恶龙(The Dragon of Loowater, UVa 11292) 你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士可以雇佣,一个能力值为x ...

  5. 历史上的今天(history)+ 勇者斗恶龙(dragon)

    朋友们我来了,好久都没有更新了,手实在痒痒,不撸两道,内心过意不去 文章目录 A:历史上的今天(history) 题目 题解 代码实现 B: 勇者斗恶龙(dragon) 题目描述 题解 代码实现 A: ...

  6. UVA11292 HDU1902 POJ3646 The Dragon of Loowater【贪心】

    问题链接:UVA11292 HDU1902 POJ3646 The Dragon of Loowater. 题意简述:(略) 问题分析: 这个问题是一个典型的贪心法问题,求代价最小. 由于需要用到排序 ...

  7. 【Dragon of Loowater】【UVA - 11292】(思维)

    题目: Once upon a time, in the Kingdom of Loowater, a mi- nor nuisance turned into a major problem. Th ...

  8. Uva 11292 The Dragon of Loowater 模拟题

    题目大意:你的王国里有一条有n个头的恶龙,你希望雇一些骑士来把它杀死(即砍掉所有的头).村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币.如何雇佣骑士才 ...

  9. 【UVA - 11292】Dragon of Loowater (贪心,水题,模拟,twopointer双指针)

    题干: 题目大意: n条恶龙,m个勇士,用勇士来杀恶龙.一个勇士只能杀一个恶龙.而且勇士只能杀直径不超过自己能力值的恶龙.每个勇士需要支付能力值一样的金币.问杀掉所有恶龙需要花费的最少金币. 解题报告 ...

最新文章

  1. PHP 汉字转拼音(首拼音,所有拼音)
  2. python合并多个csv文件_python pandas合并多个csv文件
  3. 在ubuntu用arm ds-5社区版配合linaro交叉编译工具开发android linux应用
  4. Git 使用遇到的各种问题
  5. 深入理解 PHP7 中全新的 zval 容器和引用计数机制
  6. 作者:贵芳(1991-),女,合肥工业大学计算机与信息学院硕士生
  7. JPBC库只使用椭圆曲线群,不使用双线性性质。找单位元,逆元等
  8. Centos 6.9 编译安装gcc 4.8.5
  9. ELK-Metricbeat安装及使用
  10. [IT技术]改变计算技术的伟大算法
  11. 40行代码自己动手写pdf转word小工具(文末附工具下载)
  12. Linux消息队列的设置及查看
  13. visio软件接口流程图_绘制流程图——Visio可以让你事半功倍哦!
  14. 数学之美系列—布隆过滤器(Bloom Filter)
  15. mysql拼音码自动生成_根据中文名,自动生成首字母的拼音码或拼音码(两种方法)...
  16. 浅谈IO_Link模块与现场总线模块
  17. 多关键词采集搜索引擎URL网址域名
  18. VScode主题字体(正体,斜体修改)
  19. batch软件功能测试,Batch SMART 最强序列特征[结构域]预测软件
  20. 脚本语言、编程语言、中间件

热门文章

  1. java jdk 加密_jdk实现常见的加密算法
  2. PAT 乙级 1046. 划拳(15) Java版
  3. html css 圆形按钮 仿uc,10款基于jquery的web前端动画特效
  4. 如何在MySQL中设置外键约束
  5. ZJOI2019 线段树
  6. Nginx+keepalive反向代理
  7. 使用内部(com.android.internal)和隐藏(@hide)API手记
  8. Linux的用户和组管理
  9. 写了个简单的pdo的封装类
  10. RabbitMQ集群和失败处理