小船過河(貪心演算法)

2021-09-20 15:30:09 字數 751 閱讀 1241

只有一艘船,最多能乘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 ...