過河問題 貪心

2021-09-12 03:19:06 字數 997 閱讀 6158

題目描述:

過河 (20 分)

有n個人想要過一條河,但是他們只有一條最多載兩人的船。因此必須想出乙個排程船來回的方法讓每個人都能過河。每個人都有自己的划船速度,且同一條船上的兩個人取決於慢者的速度。你的任務就是想出乙個每人都能過河的最快策略。

輸入的第一行是乙個正整數t(1 <= t <= 20),表示測試用例的組數。下面是t組用例。每個用例的第一行是正整數n,第二行是n個正整數表示每個人的划船速度。每組用例不會超出1000個人,每個人的划船時間不會超過100秒。

對於每個用例,輸出所有n個人都能過河的最短時間(秒)。

2

31 3 7

41 2 5 10

11

17

分析:

我們考慮把單獨過河所需要時間最多的兩個旅行者送到對岸去,有兩種方式:

1.最快的和次快的過河,然後最快的將船划回來;次慢的和最慢的過河,然後次快的將船划回來,所需時間為:

t[0]+2*t[1]+t[n-1];

2.最快的和最慢的過河,然後最快的將船划回來,最快的和次慢的過河,然後最快的將船划回來,所需時間為:

2*t[0]+t[n-2]+t[n-1]。

(這裡我們考慮這兩種方式的原因,主要是船能乘2人,應該盡量想辦法把最慢的兩人先送過去,保證最後一定是最快就和次快的人到對岸。這就有兩種,一是只有最快的人回來,次快的在岸上等;二是最快和最慢的人都回來一次,也就是第一次先把次快的送過去,倒數第二次,次快的再回來和最快的一起過去。)

當n大於4是,重複該情況即可。

**:

#includeusing namespace std;

#include#include#include#include#include#includeint a[1005];

int crossriver(int n,int*a)

}int main()

return 0;

}

貪心過河問題

過河問題 時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 ...

貪心 過河問題

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩...

貪心 過河問題

題目意思 每個人過河都有自己的過河時間,有n個人想過河,但只有乙隻小船,最多只能裝2個人,每一次過河,過河時間為用時最多的那人過河時間,如果還有人沒有過河,那麼過去乙個用時最少 的送回船。問n人過河最少要多少時間。分析 參考網上的思路 題意 也就是乙個坐船問題,一共有兩個策略 最快和次快過去,最快回...