uva 11292 Dragon of Loowater
https://vjudge.net/problem/UVA-11292
题意:
王国有n个龙,有m个骑士,每个其实需要花费x个金币砍掉头的直径不大于x的龙。给出每条龙头的直径和每个骑士花费的金币,问是否能把龙杀光,能的话输出最小的花费。
思路:
贪心。首先把两个数组排序,然后定义两个位置变量,如果当前的龙的直径小于等于当前的x,那么答案加上x,两个位置同时向后移动,如果不是,那么骑士的位置向后移动。
最后只需要比较龙的位置是否是到最后一个之后就可以了。
代码:
1 #include <stdio.h> 2 #include <algorithm> 3 using namespace std; 4 5 int a[200005],b[200005]; 6 7 int main() 8 { 9 int n,m; 10 11 while (scanf("%d%d",&n,&m) == 2) 12 { 13 if (n == 0 && m == 0) break; 14 15 for (int i = 0;i < n;i++) 16 { 17 scanf("%d",&a[i]); 18 } 19 20 for (int i = 0;i < m;i++) 21 scanf("%d",&b[i]); 22 23 sort(a,a+n); 24 sort(b,b+m); 25 26 int i = 0,j = 0; 27 28 long long ans = 0; 29 30 while (1) 31 { 32 if (a[i] <= b[j]) 33 { 34 ans += b[j]; 35 i++; 36 j++; 37 } 38 else 39 j++; 40 41 if (i >= n || j >= m) break; 42 } 43 44 if (i < n) printf("Loowater is doomed!\n"); 45 else printf("%lld\n",ans); 46 } 47 48 return 0; 49 }
康复训练中~欢迎交流!