考慮讓兩個人同時走,設計狀態則直接設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],max(f[i-1][j][k][m-1],max(f[i][j-1][k-1][m],f[i][j-1][k][m-1並且最後一維m不需要列舉,用i+j-k計算出來即可。(應該只能這樣做)])));
if(i==k&&j==m) f[i][j][k][m]+=g[i][j];
else f[i][j][k][m]+=g[i][j]+g[k][m];
ac**:
1 #include2 #include3 #include4ac**using
namespace
std;
5const
int n=10;6
intn,res;
7int
a,b,c;
8int
g[n][n],s[n],f[n][n][n][n];
9int
main()
21 printf("%d"
,f[n][n][n][n]);
22return0;
23 }
洛谷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...
洛谷P1004 方格取數
一道顯而易見的dp題,因為要走兩次,相當於兩個人一起從起點出發,所以可採取四維陣列儲存,前兩維記錄第乙個人,後兩維記錄第二個人。轉移方程 dp i j k m max dp i 1 j k 1 m max dp i 1 j k m 1 max dp i j 1 k 1 m dp i j 1 k m ...