UVa11292 Dragon of Loowater

解题思路:这是一道简单的贪心题,能力强的骑士开价高,如果能力强,去砍一个很弱

     的头,就是浪费人才。所以把雇来的骑士按照能力从小到大排序,所有头直径

     按照从小到大排序,一个一个砍就可以了。不能砍掉当前头的就不用雇佣了。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn = 20005;
 6 int A[maxn], B[maxn];
 7 int main()
 8 {
 9     int n, m, sum, cnt1, cnt2;
10     while(~scanf("%d %d", &n, &m) && (n || m))
11     {
12         for(int i = 0; i < n; i++) scanf("%d", &A[i]);
13         for(int i = 0; i < m; i++) scanf("%d", &B[i]);
14         if(m < n)   //因为一个骑士只能砍一个头,如果骑士人数少于
15                     //头的个数,则直接输出即可。
16         {
17             printf("Loowater is doomed!\n");
18             continue;
19         }
20         sort(A, A + n); //直接sort排序,默认从小到大
21         sort(B, B + m);
22         cnt1 = cnt2 = sum = 0;
23         while(1)
24         {
25             if(B[cnt2] >= A[cnt1])//如果能砍掉当前的头,指针同时
26                                   //往后移一位。
27             {
28                 sum += B[cnt2];
29                 cnt2 ++, cnt1 ++; 
30             }
31             else cnt2 ++; //如果不能,对应骑士到大指针往后移一位
32 
33             if(cnt1 == n || cnt2 == m) break; //如果任何一个指针扫描完了,就跳出。
34         }
35         if(cnt1 == n) printf("%d\n", sum); //如果全部的头都砍了,就输出最少花费
36         else printf("Loowater is doomed!\n");
37     }
38     return 0;
39 }
View Code

 

posted on 2015-09-18 21:13  改写历史,倾尽天下  阅读(149)  评论(0编辑  收藏  举报

导航