https://vjudge.net/problem/UVA-11292
题意:
有n条任意个头的恶龙,你希望雇一些其实把它杀死。一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币。输出最少金币。
思路:
对两者进行排序。依次比较,头少的龙尽量用能力值小的骑士去砍。
1 #include<iostream> 2 #include<cstring> 3 #include<string> 4 #include<algorithm> 5 #include<vector> 6 #include<cmath> 7 using namespace std; 8 9 const int maxn = 20000 + 5; 10 11 int n, m; 12 int a[maxn], b[maxn]; 13 14 int main() 15 { 16 //freopen("D:\txt.txt", "r", stdin); 17 while (cin >> n >> m) 18 { 19 if (!n&&!m) break; 20 for (int i = 0; i < n; i++) 21 cin >> a[i]; 22 for (int i = 0; i < m; i++) 23 cin >> b[i]; 24 sort(a, a + n); 25 sort(b, b + m); 26 int p1 = 0, p2 = 0; 27 int sum = 0; 28 while (p1 < n && p2 < m) 29 { 30 if (b[p2]>=a[p1]) 31 { 32 sum += b[p2]; 33 p1++; 34 p2++; 35 } 36 else p2++; 37 } 38 if (p1 < n) cout << "Loowater is doomed!" << endl; 39 else cout << sum << endl; 40 } 41 }