所有車的過橋最短時間

2021-09-27 12:47:00 字數 1369 閱讀 9489

今晚幫朋友助攻遇到了一道題,當時有思路但是沒有寫出來,後來結合牛客網上的解答寫了出來,也不知道具體能ac多少道題,先放在這裡等大家指點吧~

有n輛車藥陸續通過一座最大承重為w的橋,其中第i輛車的重量為w[i],通過橋的時間為t[i],要求第i輛車上橋的時間不早於第i-1輛車上橋的時間,任意時刻橋上所有車輛的總重量不超過w。

那麼,所有車輛都通過這座橋所需的最短時間為多少?

輸入:

第一行為兩個整數n,w(1def

func

(n, totalw, w, t)

:if n ==1:

return t[0]

sumt, curw =0,

0# sumt表示已經花費的時間 curw表示當前橋上承載的重量

carsidx =

# 表示目前橋上承載著的車的索引

i =0while i < n:

# 如果重量允許下一輛上車,則更新

if curw + w[i]

<= totalw:

t[i]

+= sumt # 第i輛車的下車時間=已花費的時間+過橋時間

curw += w[i]

i +=

1else

: tmp =

for idx in carsidx:

) mint =

min(tmp)

# 找出已上橋的車中最早下橋的車,記錄該車下橋的時間

j =0while j <

len(carsidx)

:# 該時刻下橋的車可能不止一輛

if t[carsidx[j]

]== mint:

curw -= w[carsidx[j]

] carsidx.pop(j)

else

: j +=

1 sumt = mint # 更新已花費的時間,即為最早下車時間

sumt = t[-1

]# 返回最後一輛車下車的時間

return sumt

if __name__ ==

'__main__'

: n, totalw =4,

2 w =[1

,1,1

,1] t =[2

,1,2

,2]print

(func(n, totalw, w, t)

)對於例子中的情況,t=0時刻第1輛和第2輛車上橋,t=1時刻第2輛車下橋,同時第3輛車上橋,t=2時刻第1輛車下橋,同時第4輛車上橋,t=3時第3輛車下車,t=4時第4輛車下車。

最短時間過橋問題

問題如下 四個女人過橋,夜間有一火把,每次最多過兩個,必需帶火把,過橋速度不一樣,分別為 兩個人過用最慢乙個的速度,火把不能扔,如何在17min內四個女人都過橋?這個問題其實園子裡已經有解決方案了 也討論了多次 不過呢 很多只有思路 原始碼也不夠詳細 於是 我再演繹一下 歸納總結一下 其實是很簡單的...

最短時間(Dijistra)

時間限制 500ms 記憶體限制 100m 最短時間 描述 夢工廠有 n 個分廠 從 1 開始編號 有m對分廠通過雙向鐵路相連。為了保證每兩個分廠之間的同學可以方便地進行交流,掌舵人張老師就在那些沒有鐵路連線的分廠之間建造了公路。在兩個直接通過公路或鐵路相連的分廠之間移動,需要花費 1 小時。現在菜...

最短路 dijkstra求最短時間)

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...