勇者鬥惡龍

2021-07-07 03:54:27 字數 1061 閱讀 6750

(一):勇者鬥惡龍

你的王國有一條n個頭的惡龍,你希望顧一些騎士把他殺死(即砍掉所有的頭)。村中有m個騎士可以僱傭,乙個能力值位x的騎士可以砍掉惡龍乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有的頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭(且不能被僱傭兩次)。

【輸入格式】

輸入包含多組資料。每組資料的第一行為正整數n和m(1 <= n,m <= 20000);以下n行每行為乙個整數,即惡龍每個頭的直徑;以下m行每行為乙個整數,即每個騎士的能力。輸入結束標誌為n = 0,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

int cmp(const

void* a,const

void* b)

int main()

}if(cur < n) printf("loowater is doomed!\n");

else

printf("%d\n",cost);

}

return

0;}

(四):程式執行結果

勇者鬥惡龍

你的王國裡有一條n個頭的惡龍,你希望僱傭一些騎士把它殺死 砍掉所有的頭 村里有m個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍乙個致敬不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 輸入包含多組資料。...

勇者鬥惡龍

有n個頭的惡龍,你希望僱一些騎士把它殺死 即砍掉所有頭 村里有 個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍 乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 多組資料,每組資料的第一行為正整...

勇者鬥惡龍

的王國裡有一條n個頭的惡龍,你希望僱一些騎士把它殺死 即砍掉所有頭 村里有m個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍掉乙個頭 且不能被僱傭兩次 輸入輸入包含多組資料。每組資料...