C语言第一行为N以下N行,C语言每日小练(四)——勇者斗恶龙
勇者斗惡龍
你的王國里有一條n個頭的惡龍,你希望雇傭一些騎士把它殺死(砍掉所有的頭)。村里有m個騎士可以雇傭,一個能力值為x的騎士可以砍掉惡龍一個致敬不超過x的頭,且需要支付x個金幣。如何雇傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,一個騎士只能砍一個頭(且不能被雇傭兩次)。
輸入格式:輸入包含多組數據。每組數據的第一行為正整數n和m(1<=n,m<=20000);以下n行每行為一個整數,即惡龍每個頭的直徑;以下m行每行為一個整數,即每個騎士的能力。輸入結束標志為n=m=0.
輸出格式:對于每組數據,輸出最少花費。如果無解,輸出“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;
}
運行結果:
總結
以上是生活随笔為你收集整理的C语言第一行为N以下N行,C语言每日小练(四)——勇者斗恶龙的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入引脚时钟约束_最强干货分享 | 时钟
- 下一篇: android显示服务器端文件夹,And