题目:一条龙有n个头,有m个勇者,勇者的能力值大于龙头的大小就能打败他,每个勇者需要能力值对等的佣金,
问使用至少多少钱可以杀掉龙。
分析:贪心。首先,将龙和勇者斗都递增排序;然后,每次雇佣当前能力值最小的可以杀龙的勇者即可。
(如果当前的勇者导致不适最优解,则他之前有比他佣金高的,则他一定更早被雇佣)
说明:田忌赛马(⊙_⊙)。
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int d[20001];
int k[20001];
int main()
{
int n,m;
while ( scanf("%d%d",&n,&m) && n+m ) {
for ( int i = 0 ; i < n ; ++ i )
scanf("%d",&d[i]);
for ( int i = 0 ; i < m ; ++ i )
scanf("%d",&k[i]);
sort( d, d+n );
sort( k, k+m );
int now = 0,sum = 0,flag = 0;
for ( int i = 0 ; i < n ; ++ i ) {
while ( now < m && d[i] > k[now] )
now ++;
if ( now >= m ) {
flag = 1;
break;
}else sum += k[now ++];
}
if ( flag )
printf("Loowater is doomed!\n");
else printf("%d\n",sum);
}
return 0;
}