演算法入門訓練之南 1 11勇者鬥惡龍

2021-07-09 17:33:39 字數 1077 閱讀 1052

你的王國裡有一條n頭的巨龍,你希望僱一些騎士把它殺死(即砍掉所有頭)。

乙個能力值為x的騎士可以砍掉惡龍乙個直徑不超過x的頭,且需要支付x個金幣。

如何僱傭騎士才能砍掉惡龍所有的頭,且需要支付的金幣最少?

注意,乙個騎士只能砍乙個頭(且不能被雇用兩次)。

【輸入格式】
輸入包含多組資料。每組資料第一行為正整數n和m(1《=n,m<=20000);

以下n行每行為乙個整數,即每個惡龍頭的直徑;

以下m行每行為乙個整數,即每個騎士的能力。

輸入結束的標誌為n=m=0。

【輸出格式】
對於每組資料,輸出最少花費。

如果無解,輸出「loowater is doomed!」。

【樣例輸入】
【樣例輸出】
【分析】能力強的騎士開價高是合理的,但如果被你派去砍乙個很弱的頭,就是浪費人才了。

因此,可以把僱傭來的騎士按照能力從小到大排序,所有的頭按直徑從小到大排序,乙個個砍就可以了。

當然不能砍掉「當前需要砍的頭」的騎士就不要僱傭了。

**如下。

#include

#include//because of the use of sort

using

namespace

std;

const

int maxn = 2005;

int a[maxn], b[maxn];

int main()

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

else

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

}return

0;}

//以上是書上給出的解題思路,是比較好的方法。當然這題的方法肯定不止一種,或優或劣。

分析:思路二:不排序,直接對每個巨龍頭的直徑檢索騎士能力值。取大於等於直徑的能力值的騎士。

對上述思路的質疑。是否會造成能力值浪費,留給讀者們思考。

演算法訓練入門

為什麼要學習演算法?原因一 演算法是程式設計的內功修煉 原因二 去國內一流網際網路的必要條件 原因三 演算法與資料結構是有趣和實用的 如何有效的學習演算法與資料結構 異類 不一樣的成功啟示錄 1.切碎知識點,注重脈絡和聯絡,注意知識結構 2.刻意練習,練習不熟悉,有缺陷的地方,會感覺不舒服和枯燥的地...

演算法入門訓練例子

1017 a除以b 20 分 本題要求計算 a b,其中 a 是不超過 1000 位的正整數,b 是 1 位正整數。你需要輸出商數 q 和餘數 r,使得 a b q r成立。輸入在一行中依次給出 a 和 b,中間以 1 空格分隔。在一行中依次輸出 q 和 r,中間以 1 空格分隔。123456789...

南橋 演算法訓練 2的次冪表示

題目詳情 問題描寫敘述 不論什麼乙個正整數都能夠用2進製表示,比如 137的2進製表示為10001001。將這樣的2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到例如以下表示式 137 2 7 2 3 2 0 如今約定冪次用括號來表示,即a b表示為a b 此時。137可表示為 2 7 ...