題意:有m輛車,每次最多運n輛過河,過河過去需要t時間回來需要t時間,m輛車一開始並不是都在岸邊的,給出m輛車抵達岸邊的時間(只有車抵達河岸才能過河),問使得所有車輛過河所需要的最少次數 跟 最早時間
分析:
一開始看題目可能覺得有兩個最優解,最少次數跟最早時間,次數最少猜測一下,m%n==0則剛好為m/n次 否則 為m/n+1次,然後考慮最早時間,時間要最早 其實就是最後一輛車最早過河了即可,那麼最後一輛車盡早被送走就好,看樣子可以貪心
舉了幾個案例試了一下,若m%n==0則不用說了,每次運n輛車過河即可,這樣既保證了次數最少又保證了時間最早
若m%n!=0,那麼第一次運m%n輛車,剩下的每次運n輛車即可,所以貪心是可以的
#include
#include
#include
#include
#include
#include
#include
#include
這道題貪心可以,那麼深入試了一下,動規也是可以的,
dp[i]表示送走第i輛車的最早時間
num[i]表示送走第i輛車的次數
注意時間的早和晚不能直接取的,因為車子到了你才能運過河,
所以狀態轉移方程有個去當前dp數組值與當前的time數組值最大值的地方要注意
dp[i] = min(max(dp[j] + t,time[i]) + t),其中j為 i-n 到i
次數轉移就簡單了直接 num[i] = num[j] + 1,其中j為最小的
#include
#include
#include
#include
#include
#include
#include
#include