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