!HDU 1494 跑跑卡丁車 dp

2021-07-03 18:29:17 字數 786 閱讀 2987

題意:一圈賽道分成l段,每段有兩種情況,以普通速度則獲得20%能量,用加速卡則速度加速;加速卡需要100%的能量來換取。加速卡最多收集兩張。求跑完m圈的最短時間。

分析:dp問題還是狀態搞不定。跟rp那道結合起來看吧。rp是一維,這題是二維,但是確定狀態的出發點是相似的。

引用一段網友的話,加深理解:「因為賽道分為l段,所以很容易想到讓dp的第一維用來表示當前在第幾段賽道。因為加速卡要100%能量才會獲得一張,而每走一段賽道又會獲得20%的能量,所以我們可以吧能量槽也分成段,具有5段能量槽就可以獲得一張加速卡,那麼用第二維來表示當前的能量槽的段數話,就表示出所有的狀態了。」

dp[i][j]表示在i段能量為j的時候花費的最短時間,dp[i][j]=min(dp[i-1][j-2]+a[i],dp[i-1][j+10]+b[i])。注意一些特殊情況單獨考慮,如j=20可以是18也可以是28轉移過來的

**:#include#define inf 100000000007

using namespace std;

int l,m;

long long dp[10005][50],ans;

int a[10005],b[10005];

long long min(long long i,long long j) }}

int main()

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

dp();

ans=inf;

for(int i=0;i<30;i+=2)

ans=min(ans,dp[l*m][i]);

cout<

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 跑跑卡丁車

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