洛谷 P1004 方格取數 簡單dp

2022-05-07 23:33:18 字數 823 閱讀 5269

這道題分類到簡單dp但是感覺一點都不簡單……這種做兩次的dp真的不是很懂怎麼寫。假如是貪心做兩次,感覺又不能證明這是最優的。

直接看題解,題解要設定4個維度,兩個人同時走……但是怎麼避免同乙個物品被兩個人拿呢?

設定dp[i][j][k][l]表示第1個人走到ij,第2個人走到kl能實現的最大的取法,再加一維[p]表示現在已經取了00,01,02,10,11,12,20,21,22個物品,然後dp的內容是乙個vector!這樣就完美地表達了所有資訊了!這樣同乙個物品只會讓乙個狀態轉移到另乙個狀態,保證不會讓這個物品同時被取到!空間複雜度?我為什麼要管空間複雜度?這個dp時間複雜度都是和空間複雜度同階的……省那一點幹嘛呢……

好了看了別人的狀態設定,找到乙個思路,先自己寫試試看……

寫個鬼哦我去,讀錯題了,不是只能拿兩個物品……我又該睡覺了……

注意兩個人是同時走的!假設不是兩個人同時走的,那會怎麼樣呢?那樣不僅複雜度上公升了n²,而且不能判斷當前格仔是不是被另乙個人的路取過了

#includeusing

namespace

std;

#define ll long long

int dp[10][10][10][10

];int a[10][10

];int

main()

for(int i=1;i<=n;i++)}}

}printf(

"%d\n

",dp[n][n][n][n]);

}

別人的題解說後面還有傳紙條和回文的路徑,也是這種兩邊一起做的dp。

洛谷 P1004 方格取數(DP)

考慮讓兩個人同時走,設計狀態則直接設f i j k m 表示第乙個人走到 i,j 第二個人走到 k,m 時所取數的最大值。當 i,j k,m 時,即兩個人走到同乙個點,則這個點其實在第二遍的時候已經為0,所以這個點的貢獻只是一次。則有轉移方程 f i j k m max f i 1 j k 1 m ...

洛谷P1004方格取數( )

題目描述 設有n times nn n的方格圖 n le 9 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字00。如下圖所示 見樣例 a 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 ...

洛谷 P1004 方格取數

洛谷 p1004 方格取數 設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放 人數字0。如下圖所示 見樣例 a 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4...