#51506: 關於這題我心中的糟糕念頭


haoting (顥庭)

學校 : 不指定學校
編號 : 196309
來源 : [61.58.96.80]
最後登入時間 :
2025-10-06 03:04:03

之前看過dp二維安排行程的題目,好像可以套用到這題上來:

先令dp狀態:dp[i][j][k]中含有(k = 0)從左邊走來的、(k = 1)從上面走來的、(k = 2)從右邊走來的,轉移式也就是:dp[i][j][k] = 自己的經驗值+max(前一格的最佳情況)。

 

但這樣還不是很清楚,所以繼續說:

由於題目說不能走重複的,也就是說dp[i][j][2]不可能會是dp[i][j+1][0],這樣就觸發了左邊走來再走回去的現象。

換句話說可以把橫列中每格的k = 0先由左至右處理好,再由右至左處理k = 2,至於k = 1...跟左右完全無關,但必須在一開始就處理。

順序:

1.先把每格的k = 1設為上一列(dp[i-1][j])的max+自己的經驗

2.再來是由左至右把k = 0設為左邊那格k = 0,k = 1取max+自己的經驗

3.k = 2同理,設為右邊那格k = 1,k = 2取max+自己的經驗。

 

dp初始值記得取極小值,可以用-0x3f3f3f3f,整數狀態加減都很難逾值的安全極小值。

還有要小心邊界處理,左邊沒人的k = 0就直接不要管他(右邊沒人同理),保持-0x3f3f3f3f

以及第一列要特別處理,因為第一列可以從任意點開始,稍微想想k = 1要怎麼改