貪心演算法 小船過河問題

2021-09-12 15:26:02 字數 1143 閱讀 8738

【description】

一群人划船過河,河邊只有一條船,這條船可以容納兩個人,船過河後需要一人將船開回,以便所有人都可以過河,每個人過河速度不一樣,兩個人過河速度取決於慢的那個人,請問最少需要多久讓所有人過河?

【input】

第一行輸入人數n;

第二行輸入每個人過河所需的時間;

【output】

輸出需要的最少時間

【sample input】

41 2 5 10

【sample output】

17題目分析:

兩種方法,較容易想到的是第一種方式:

第一種辦法:先讓1 2過去(2分鐘),1回來(1分鐘),1 5過去(5分鐘),1回來(1分鐘),1 10再過去(10分鐘),總共需要19分鐘就可以讓四個人都過去。

而正確答案是第二種辦法:先讓1 2過去(2分鐘),1回來(1分鐘),5 10過去(10分鐘),2回來(2分鐘),1 2再過去(2分鐘),總共需要17分鐘就可以讓四個人都過去。

本題的關鍵在於把最慢的和次慢的兩個人運過河,因此只要大於四個人的情況下:只需要將這兩種方式這兩個人運過河的時間做對比:

第一種:t4+t1+t3+t1

第二種:t2+t1+t4+t2

對比之後取短的就行

原始碼如下:

#include

#include

using namespace std;

/*void swap(int a,int x,int y)

int getpoint(int a,int low,int high)

if(n==3)

time=time+a[0]

+a[1

]+a[n-1]

;if(n==2)

time=time+a[n-1]

;if(n==1)

time=time+a[0]

;return time;

}int

main()

小船過河(貪心演算法)

只有一艘船,最多能乘2人,船的執行速度為2人中較慢一人的速度,過去後還需乙個人把船划回來,問把n個人運到對岸,最少需要多久。輸入 4 1 2 5 10 輸出 17 1.因為考慮到需要乙個人把船划回來,所以我們可以用速度最快的人把其他人帶到對岸。a b c d ac a ad a 運輸成本 2a c ...

貪心之小船過河問題

題目來自南陽理工oj 過河問題 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的...

小船過河問題

小船過河問題 poj1700是一道經典的貪心演算法例題。題目大意是只有一艘船,能乘2人,船的執行 速度為2人中較慢一人的速度,過去後還需乙個人把船划回來,問把n個人運到對岸,最少需要多久。先將所有人過河所需的時間按照公升序排序,我們考慮把單獨過河所需 要時間最多的兩個旅行者送到對岸去,有兩種方式 1...