poj 1700 題解

2022-06-23 17:03:08 字數 958 閱讀 8001

題目描述:在漆黑的夜裡,四位旅行者來到了一座狹窄而且沒有護欄的橋邊。

如果不借助手電筒的話,大家是無論如何也不敢過橋去的。

不幸的是,四個人一共只帶了一隻手電筒,而橋窄得只夠讓兩個人同時過。

如果各自單獨過橋的話,四人所需要的時間分別是1、2、5、10分鐘;

而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。

問題是,如何設計一個方案,讓這四人儘快過橋

輸入示例:

4

1, 2, 5, 10

輸出示例:

17
n = 4

speed = [1, 2, 5, 10]

def f(n:int, speed:list) -> int:

""":param n: 渡河的人數

:param speed: 已排好序的每人的速度

:return: 返回最短時間渡河的時間

"""left = n

ans = 0

while (left > 0):

if left == 1:

ans += speed[0]

break

if left == 2:

ans += speed[1]

break

if left == 3:

ans += speed[2] + speed[0] + speed[1]

break

s1 = speed[1] + speed[0] + speed[left -1] + speed[1]

s2 = speed[left-1] + speed[left-2] + 2 * speed[0]

ans += min(s1, s2)

left -= 2

return ans

poj1700

此題講的是n個人過河,每個人都有自己的過河時間,一條船隻能承受2個人,所用時間為其中過河時間最多的,所以呢,想到有兩種情況,第一種 過河時間...

poj1700

這題的最坑的地方就是每步可能會有兩種情況,這兩情況起初我都單獨考慮了,但就是沒放在一起考慮。。。wa個不停,果然貪心是一個很考驗思維的東西。 這裡可以這樣考慮,在運人的過程中,河的起始岸最後終將剩下一個或者兩個 人,並且是用時最大的。所以這個時候就會有兩種情況,dp i dp i 1 time i ...

poj 1700 過河問題 貪心法

include include using namespace std 貪婪法 1 當人數 3時 直接過 2 當人數 3時 假設為a b c...