今晚幫朋友助攻遇到了一道題,當時有思路但是沒有寫出來,後來結合牛客網上的解答寫了出來,也不知道具體能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...