[UVA-11292] Dragon of Loowater(勇者斗恶龙) 题解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[UVA-11292] Dragon of Loowater(勇者斗恶龙) 题解相关的知识,希望对你有一定的参考价值。

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

题目链接:(vjudge)https://vjudge.net/problem/UVA-11292

Uva上找了半天愣是没找到Problem在哪...vjudge大法好。

题目大意:

有n条龙和m个骑士,每条龙有一个邪恶值z,每个骑士有一个能力值x。如果骑士的能力值大于龙的邪恶值,骑士可以杀死龙,但同时需要支付x枚金币。

给出龙和骑士的数据,问要杀死所有的龙,最少需要支出多少金币。每个骑士只能雇用一次。

输入包含多组数据,以 0 0 作为输入全部结束的标志。

如果无法杀死所有的龙,输出Loowater is doomed!

 

分析:

给龙和骑士按照邪恶值/能力值从小到大进行排序,然后尽量用能力值小的骑士杀龙。

 

AC代码:

 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 
 6 const int MAXN = 20005;
 7 
 8 inline void read(int &x)
 9 {
10     char ch = getchar(),c = ch;x = 0;
11     while(ch < 0 || ch > 9) c = ch,ch = getchar();
12     while(ch <= 9 && ch >= 0) x = (x<<1)+(x<<3)+ch-0,ch = getchar();
13     if(c == -) x = -x;
14 }
15 
16 int knight[MAXN],dragon[MAXN];
17 
18 int main()
19 {
20     int m,n,ans,i,j,cnt;
21     while(1)
22     {
23         read(n),read(m);
24         if(m == 0 && n == 0)
25             return 0;
26         ans = 0,cnt = 1;
27         memset(knight,0,sizeof(knight));
28         memset(dragon,0,sizeof(dragon));
29         for(i = 1;i <= n;++ i)
30             read(dragon[i]);
31         for(j = 1;j <= m;++ j)
32             read(knight[j]);
33         std::sort(knight+1,knight+1+m);
34         std::sort(dragon+1,dragon+1+n);
35         for(int i = 1;i <= m;++ i)
36         {
37             if(knight[i] >= dragon[cnt])
38                 ans += knight[i],cnt ++;
39             if(cnt > n)
40                 break;
41         }
42         if(cnt <= n)
43             printf("Loowater is doomed!\n");
44         else
45             printf("%d\n",ans);
46     }
47     return 0;
48 } 

 

以上是关于[UVA-11292] Dragon of Loowater(勇者斗恶龙) 题解的主要内容,如果未能解决你的问题,请参考以下文章

UVA 11292 Dragon of Loowater(简单贪心)

UVA 11292 Dragon of Loowater

uva11292 Dragon of Loowater

UVa 11292 - Dragon of Loowater

[2016-03-14][UVA][11292][Dragon of Loowater]

uva 11292 Dragon of Loowater