UVa 11292 The Dragon of Loowater 勇者斗恶龙

来源:互联网 发布:最新网络流行词2016 编辑:程序博客网 时间:2024/05/17 06:46


题意:你需要雇佣m个骑士去杀死一个有n个头的龙,每个骑士有一个能力值x。能力值为x的骑士可以砍掉一个直径<=x的头,且需要花费x去雇佣。每个骑士最多只能被雇用一次。求杀死龙的最小花费。



典型贪心。将龙头的直径和骑士的能力值分别从小到大排序,从小到大砍龙头。贪心准则是每一个龙头用拥有最接近它直径的能力值的骑士去杀。



#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <vector>#include <map>using namespace std;const int MAX = 20005;int n, m;int dragon[MAX], knight[MAX];void input(){    for(int i = 0; i < n; i++)        scanf("%d", &dragon[i]);    for(int i = 0; i < m; i++)        scanf("%d", &knight[i]);}void solve(){    sort(dragon, dragon + n);    sort(knight, knight + m);    int j = 0;    int ans = 0;    for(int i = 0; i < n; i++)    {        while(j < m && knight[j] < dragon[i])            j++;        if(j == m)        {            printf("Loowater is doomed!\n");            return;        }        ans += knight[j];        j++;    }    printf("%d\n", ans);}int main(){    while(scanf("%d%d", &n, &m) && !(n == 0 && m == 0))    {        input();        solve();    }    return 0;}

0 0
原创粉丝点击