【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...