Hdu 1494 跑跑卡丁車

2022-02-17 03:11:24 字數 1304 閱讀 3586

題目鏈結

中文題,題意一目了然

l段路,n圈

那麼可以視為l*n段路  跑一圈所用最快時間。

每個加速卡由100能量得到,每跑一段路得到20的能量,最多獲得2張加速卡以及80能量。

可以簡化成 1表示20能量,則5表示一張加速卡,10表示兩張,14表示2張加速卡以及80能量,當為15時則成了兩張加速卡以及0能量

設dp[i][j]為在第i段路,能量為j時所用最快時間,則狀態轉移方程則為:

dp[i+1][10]  = min(dp[i][j] + a[i], dp[i+1][10]) , j+1 == 15

dp[i+1][j+1] = min(dp[i][j] + a[i], dp[i+1][j+1]) , j+1 < 15

dp[i+1][j-5] = min(dp[i][j] + b[i], dp[i+1][j-5]) , j+1 >= 5 

最終的答案便是在dp[l*n]中尋找最小值

**如下:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 

11 #include 12 #include 13

using

namespace

std;

14#define maxn 10010

15#define inf 0x3f3f3f3f

16#define mod 1000000007

17#define eps 1e-6

18#define ll long long

19int dp[maxn][20

] , a[maxn] , b[maxn];

20int

l , n;

21void

read()

2229

for(int i = 1; i <= l; i ++)

3035}36

void

solve()

3753}54

int ans =inf;

55for(int i = 0; i < 15; i ++)

56 ans =min(ans , dp[cnt][i]);

57 printf("

%d\n

",ans);58}

5960

intmain()

6167

return0;

68 }

view code

HDU 1494 跑跑卡丁車

題目大意 有乙個n圈的跑道,跑道裡有l段路,每次跑過一段路加速器增加20 的能量,當有我們有乙個加速卡時,可以使用加速,我們最多可以積攢兩個加速卡,問跑完n圈的最小時間是多少。題目分析 首先我們可以把它按照dp求解 dp i j 表示走完前l段路,積累了j個20 能量所消耗的最小時間。其中只要注意一...

HDU 1494 跑跑卡丁車

很無愛的一道題。題解都看得一知半解的。acm之家的題解,留著以後慢慢體會 把這題轉化為揹包模型,每個 20能量算乙個單位,最多有15個,如果大於5個有乙個加速卡,如果大於10個有2個加速卡,如果等於16則邊為10,2個滿時清0.15就是揹包的最多容量,正常跑算乙個物品,權值 這裡不說重量有負值 為1...

HDU 1494 跑跑卡丁車

題目鏈結 狀態方程推不出,這題,個人認為比較難,的經常看看 將氮氣看成14個狀態,14為2個卡與80 dp i j 表示為跑完第i段還剩j的最短時間,if k 0 剩0是為衝過來的。dp j k dp j 1 k 5 b j else if k 10 剩10有兩種情況,從9過來 從14過來 dp j...