动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
Food Delivery
? ZOJ - 3469?區(qū)間DP的一道好題。
在這道題里,無非就是從出發(fā)點(diǎn)向左走到x1再向右走到有y1,再向左走到x2,再向右走到y(tǒng)2.。。。這樣,一直將所有的顧客遍歷完。
顯然,起點(diǎn)這個點(diǎn)是非常特殊的一個點(diǎn),我們姑且也把它算作一名顧客,那么這名顧客的憤怒值設(shè)置為0。
然后定義dp[x][y][0]表示區(qū)間遍歷完[x,y]了,并且當(dāng)前停留在x位置上,將對最終的憤怒值之和造成的貢獻(xiàn)。
定義dp[x][y][1]表示遍歷完區(qū)間[x,y],并且當(dāng)前停留在y位置上,將對最終的憤怒之和造成的貢獻(xiàn)。
從上面我們的討論中可以發(fā)現(xiàn)[x,y]一定是包含起始點(diǎn)S的,不然這個區(qū)間將沒有意義。
我們可以得到狀態(tài)轉(zhuǎn)移的方程 (我們沒有在這里就把V乘進(jìn)去,而是在最后才把V考慮進(jìn)去)
dp[i][j][0] = min(dp[i][j][0],dp[i+1][j][0] + (Ns[i+1].x - Ns[i].x)*(sum[N+1] - (sum[j] - sum[i])));
dp[i][j][0] = min(dp[i][j][0],dp[i+1][j][1] + (Ns[j].x - Ns[i].x)*(sum[N+1] - (sum[j] - sum[i])));
dp[i][j][1] = min(dp[i][j][1],dp[i][j-1][1] + (Ns[j].x - Ns[j-1].x)*(sum[N+1] - (sum[j-1] - sum[i-1])));
dp[i][j][1] = min(dp[i][j][1],dp[i][j-1][0] + (Ns[j].x - Ns[i].x)*(sum[N+1] - (sum[j-1] - sum[i-1])));
以上的狀態(tài)轉(zhuǎn)移方程就相當(dāng)于把區(qū)間擴(kuò)大了一位數(shù)字,貢獻(xiàn)增加的值。
我看很多題解的時候,沒有明確說明dp表示的是對于答案的貢獻(xiàn)值,所以沒能充分的理解。
反思這個動態(tài)規(guī)劃的題目,有點(diǎn)特別,就是說dp代表的東西不能形成一個類似的獨(dú)立的子問題,而仍然是刻畫原問題的某個性質(zhì)的一部分,這里我覺得是與其他一些dp不同的地方。
總結(jié)
以上是生活随笔為你收集整理的动态规划训练25 [Food Delivery ZOJ - 3469 ]好题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划训练24 [Phalanx HD
- 下一篇: 双向广搜 8数码问题