HDU 1494 跑跑卡丁車

2022-05-22 12:24:09 字數 1213 閱讀 5784

很無愛的一道題。

題解都看得一知半解的。

acm之家的題解,留著以後慢慢體會:

把這題轉化為揹包模型,每個%20能量算乙個單位,最多有15個,如果大於5個有乙個加速卡,如果大於10個有2個加速卡,如果等於16則邊為10,2個滿時清0.15就是揹包的最多容量,正常跑算乙個物品,權值(這裡不說重量有負值)為1,價值為ai,加速也算乙個物品,權值為-5,價值為bi,每次都必須選乙個物品,問最後獲得得最少價值。恩,有點牽強,但只要轉化好理解些。

那麼狀態轉移方程為:dp[i+1][j+1] = min(dp[i][j]+a[i],dp[i+1][j+1]);  (dp[i][j]表示跑了i個賽道能量為j時最少的耗時,a[i]為正常跑的時間,和揹包的轉移方程很像吧)

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

1

//#define local

2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;78

const

int maxn = 10000 + 10;9

const

int inf = 0xffffff0;10

int dp[maxn][16

];11

inta[maxn], b[maxn];

1213

int main(void)14

3334

for(i = 0; i <= tot; ++i)

35for(int j = 0; j <= 15; ++j)

36 dp[i][j] =inf;

37 dp[1][1] = a[0

];38

39for(i = 1; i < tot; ++i)

40for(int j = 0; j < 15; ++j)

4149

50int ans =inf;

51for(i = 0; i < 15; ++i)

52 ans =min(ans, dp[tot][i]);

53 printf("

%d\n

", ans);54}

5556

return0;

57 }

**君

HDU 1494 跑跑卡丁車

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

Hdu 1494 跑跑卡丁車

題目鏈結 中文題,題意一目了然 l段路,n圈 那麼可以視為l n段路 跑一圈所用最快時間。每個加速卡由100能量得到,每跑一段路得到20的能量,最多獲得2張加速卡以及80能量。可以簡化成 1表示20能量,則5表示一張加速卡,10表示兩張,14表示2張加速卡以及80能量,當為15時則成了兩張加速卡以及...

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...