只有一艘船,最多能乘2人,船的執行速度為2人中較慢一人的速度,過去後還需乙個人把船划回來,問把n個人運到對岸,最少需要多久。
輸入:4
1 2 5 10
輸出:17
1.因為考慮到需要乙個人把船划回來,所以我們可以用速度最快的人把其他人帶到對岸。
a b…c d
ac->
<-a
ad->
<-a
運輸成本:2a+c+d
2.因為考慮到船往對岸划時,時間為兩人中速度較慢的人,所以當兩個人都為速度最慢時,即節省了另外乙個人的運輸成本,但因為需要有人把船划回來,所以我們可以:
a b…c d
ab->
<-a
cd->
<-b
運輸成本:a+2b+d
當a+c<2b時思路一為最優解。反之則思路二為最優解。
#define _crt_secure_no_warnings 1
#include#includevoid sort(int a, int len) }}
int main()
sort(a, n);
while (n > 0)
else if (n == 2)
else if (n == 3)
else
}printf("%d\n", sum);
system("pause");
return 0;
}
貪心演算法 小船過河問題
description 一群人划船過河,河邊只有一條船,這條船可以容納兩個人,船過河後需要一人將船開回,以便所有人都可以過河,每個人過河速度不一樣,兩個人過河速度取決於慢的那個人,請問最少需要多久讓所有人過河?input 第一行輸入人數n 第二行輸入每個人過河所需的時間 output 輸出需要的最少...
貪心之小船過河問題
題目來自南陽理工oj 過河問題 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的...
貪心演算法一過河問題
一 當人數大於3的時候,分為兩種情況 1.最快的和次快的兩個人過河,最快的人回來,time a 0 a 1 這個時候並不是最快的人直接和最慢的人一起過去,而是最快的那個人等待,讓最慢的人和次慢的人先過去,time a n 1 那麼time這一步執行完就要對n進行 2的操作。time a 0 a 1 ...