UVA 11292 - Dragon of Loowater 排序问题

本文介绍了一个经典的算法问题,勇士们需要根据自身的能力值来逐一砍掉恶龙的头,每砍掉一个头需要满足特定条件。文章提供了具体的算法实现思路及C++代码,通过排序比较勇士能力和恶龙头能力来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

题意就是每个勇士有个能力值,恶龙有多个头,一个勇士的能力值要大于恶龙的一个头的能力值,就可以将一个头砍掉,一个勇士只能用一次,雇佣的价格等于勇士的能力值,问是否能将恶龙的头全部砍掉,若能输出最小花费。

算法: 对勇士能力值从小到大排序,对恶龙的能力值排序,然后一一比对就可以了。

post code:

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 20000+20
int dragon[maxn],knight[maxn];
int main()
{
   int n,m;
   while(scanf("%d%d",&n,&m)!=EOF){
        if( (n==0)&&(m==0) )break;
        for(int i=1;i<=n;i++)
           scanf("%d",&dragon[i]);
        for(int i=1;i<=m;i++)
           scanf("%d",&knight[i]);
        sort(dragon+1,dragon+n+1);
        sort(knight+1,knight+m+1);
        int i,j=1,sum=0;
        for(i=1;i<=m;i++){         //warrior kill one head of a dragon
            if(knight[i]>=dragon[j]){
               sum+=knight[i];
               j++;
               if(j==n+1)break;                        
            }
        }
        if(j==n+1)printf("%d\n",sum);
        else printf("Loowater is doomed!\n");
                                   
                                   
   } 
   return 0;   
} 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值