題目描述
設有 n \times n×n 的方格圖 (n \le 9)(n≤9),我們將其中的某些方格中填入正整數,而其他的方格中則放入數字 0。如下圖所示(見樣例):
a 00
0000
0000
13006
0000
0070
0000
01400
00021
0004
0000
15000
00014
0000
0000
0000
00b
某人從圖的左上角的 a 點出發,可以向下行走,也可以向右走,直到到達右下角的 b 點。在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字 0)。
此人從 a 點到 b 點共走兩次,試找出 2 條這樣的路徑,使得取得的數之和為最大。
輸入格式
輸入的第一行為乙個整數 nn(表示 n \times n×n 的方格圖),接下來的每行有三個整數,前兩個表示位置,第三個數為該位置上所放的數。一行單獨的 0 表示輸入結束。
輸出格式
只需輸出乙個整數,表示 2 條路徑上取得的最大的和。
輸入輸出樣例
輸入 #1
823
13266
3574
41452
21564
63157
21400
0
輸出 #1
67
我們可以看成兩個人同時從a點出發到b點
定乙個f [i] [j] [k] [l]的四維陣列,(i , j)代表第乙個人的當前座標(k,l)代表第二個人的當前座標f [i] [j] [k] [l]的內容為當a走到(i , j),b走到(k,l)時,前面所走路徑數字的最大值;
#include
#include
#define maxn 12
int dp[maxn]
[maxn]
;int f[maxn]
[maxn]
[maxn]
[maxn]
;int n,a,b,c;
intmax
(int q,
int p)
intmain()
for(
int i=
1;i<=n;i++
)for
(int j=
1;j<=n;j++
)for
(int k=
1;k<=n;k++
)for
(int l=
1;l<=n;l++
)printf
("%d"
,f[n]
[n][n]
[n])
;return0;
}
四維dp 方格取數
給定乙個 n times n 的方格,只能向下和向右行走,有些方格上有一些數字,其餘為 0 每個數字只能取一次,乙個人從左上角走到右下角兩次能夠取得的數字最大是多少 1 leq n leq 9 兩個人同時走,四維分別表示兩個人,如果兩人的路線相同那麼只能加一次即可 includeusing name...
Acwing 1027 方格取數(四維dp)
傳送門 設有 n n 的方格圖,我們在其中的某些方格中填入正整數,而其它的方格中則放入數字0。如下圖所示 某人從圖中的左上角 a 出發,可以向下行走,也可以向右行走,直到到達右下角的 b 點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從 a 點到 b 點共走了兩次,試找出兩...
洛谷P1004 方格取數 四維DP
設有 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 0 ...