C语言第一行为N以下N行,C语言每日小练(四)——勇者斗恶龙
勇者斗惡龍
你的王國(guó)里有一條n個(gè)頭的惡龍,你希望雇傭一些騎士把它殺死(砍掉所有的頭)。村里有m個(gè)騎士可以雇傭,一個(gè)能力值為x的騎士可以砍掉惡龍一個(gè)致敬不超過(guò)x的頭,且需要支付x個(gè)金幣。如何雇傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,一個(gè)騎士只能砍一個(gè)頭(且不能被雇傭兩次)。
輸入格式:輸入包含多組數(shù)據(jù)。每組數(shù)據(jù)的第一行為正整數(shù)n和m(1<=n,m<=20000);以下n行每行為一個(gè)整數(shù),即惡龍每個(gè)頭的直徑;以下m行每行為一個(gè)整數(shù),即每個(gè)騎士的能力。輸入結(jié)束標(biāo)志為n=m=0.
輸出格式:對(duì)于每組數(shù)據(jù),輸出最少花費(fèi)。如果無(wú)解,輸出“Loowater is doomed!”。
樣例輸入:
2 3
5
4
7
8
4
2 1
5
5
10
0 0
樣例輸出:
11
Loowater is doomed!
解:此題直接按如下思路:龍頭大小和騎士能力值排序->分別比較->雇傭滿足條件的騎士~即可~
附上代碼:
#include#include #includeusing namespace std;
#define MAX 20000
int warriors[MAX];
int dragon[MAX];
int main()
{
int i, j, sum;
int n, m;
while(scanf("%d%d", &n, &m) == 2 && n && m)
{
for(i = 0; i < n; i++) scanf("%d", &dragon[i]);
for(j = 0; j < m; j++) scanf("%d", &warriors[j]);
sort(dragon, dragon+n); sort(warriors, warriors+m); //將龍頭和騎士從小到大排序
j = 0; sum = 0;
for(i = 0; i < m; i++)
{
if(warriors[i] >= dragon[j]) //如果騎士能力值足夠,可以砍掉此龍頭
{
sum += warriors[i]; //雇傭該騎士
j++;
}
if(j == n) break;
}
if(j == n) printf("%d\n", sum);
else printf("Loowater is doomed!\n");
}
return 0;
}
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的C语言第一行为N以下N行,C语言每日小练(四)——勇者斗恶龙的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入引脚时钟约束_最强干货分享 | 时钟
- 下一篇: c语言分配飞机10个座位,leetcod