貪心入門 獨木舟問題

2021-09-13 11:53:40 字數 1024 閱讀 3362

n個人,已知每個人體重,獨木舟承重固定,每只獨木舟最多坐兩個人,可以坐乙個人或者兩個人。顯然要求總重量不超過獨木舟承重,假設每個人體重也不超過獨木舟承重,問最少需要幾隻獨木舟?

分析: 

乙個顯然的策略是按照人的體重排序。

極端化貪心策略,最重的人要上船——如果最重的人和最輕的人體重總和不超過船的承重,則他們兩個占用一條船。否則(因為假設最重的人的體重也不超過船的承重了),最重的人單獨佔一條船。轉變為(n – 1)或者(n – 2)的問題了。

關鍵在於這種貪心策略是正確的。我們可以證明,最優解也可以變為這種策略。

(1) 假設最重的人和最輕的人的體重和超過了船的承重,那麼最優解中,顯然也是最重的人單獨佔一條船,所以這種情況下最優解和貪心策略是相同的。

收起最後,我們來提供輸入輸出資料,由你來寫一段程式,實現這個演算法,只有寫出了正確的程式,才能繼續後面的課程。

輸入

第一行包含兩個正整數n (0輸出

一行乙個整數表示最少需要的獨木舟數。

輸入示例

3 612

3

輸出示例

2
入門題,直接上**吧

#include#include#include#include#include#include #include #include #include#include#include #include#include #include typedef long long ll;

using namespace std;

ll ans[10100];

int main()

ll sum=0;ll k=0,l=n-1;

sort(ans,ans+n);

while(kelse

}if(l==k) sum++;//注意,當l==k跳出,但是還剩下乙個人

cout<}

貪心入門 獨木舟問題

n個人,已知每個人體重,獨木舟承重固定,每只獨木舟最多坐兩個人,可以坐乙個人或者兩個人。顯然要求總重量不超過獨木舟承重,假設每個人體重也不超過獨木舟承重,問最少需要幾隻獨木舟?分析 乙個顯然的策略是按照人的體重排序。極端化貪心策略,最重的人要上船 如果最重的人和最輕的人體重總和不超過船的承重,則他們...

獨木舟 貪心

魔法學院放暑假了,wc和他的一幫魔友一起去弗爾夫斯基山脈玩。莫伊拉同學突然想划船到對岸找被削的mercy玩,這裡的每一艘船都是同一型號,能承受的重量都是一樣的,並且每艘船都可以坐乙個或者兩個人。wc他們共有n個人,現在我們知道他們每個人的質量,而且每個人體重也不超過船的承重。可惜經費有限,他們必須租...

ACM 貪心演算法 獨木舟問題

n個人,已知每個人體重,獨木舟承重固定,每只獨木舟最多坐兩個人,可以坐乙個人或者兩個人。顯然要求總重量不超過獨木舟承重,假設每個人體重也不超過獨木舟承重,問最少需要幾隻獨木舟?分析 乙個顯然的策略是按照人的體重排序。極端化貪心策略,最重的人要上船 如果最重的人和最輕的人體重總和不超過船的承重,則他們...