位址
描述設有n*n的方格圖(n<=10),我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示(見樣例):< p="">
某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。 此人從a點到b 點共走兩次,試找出2條這樣的路徑,使得取得的數之和為最大。
輸入輸入的第一行為乙個整數n(表示n*n的方格圖),接下來的每行有三個整數,前兩個表示位置,第三個數為該位置上所放的數。一行單獨的0表示輸入結束。
輸出只需輸出乙個整數,表示2條路徑上取得的最大的和。
樣例輸入
8樣例輸出2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0
67思路:設一四維的陣列,dp[i1][j1][i2][j2]表示兩條路分別從1,1 走到i1,j1,i2,j2的最大值
同乙個格仔不能重複,當i1==i2&&j1==j2所以只要加一次a【i1】【j1】;
每個點都是從上乙個點過來的,
有四種情況,①第一條向下走,第二條也向下走 dp[i1-1][j1][i2-1][j2]
②第一條向下走,第二條向右走 dp[i1-1][j1][i2][j2-1]
③第一條向右走 , 第二條也向右走 dp[i1][j1-1][i2][j2-1]
④第一條向右走, 第二條向下走 dp[i1][j1-1][i2-1][j2]
綜上取最大即可
#include#include#include
#include
using
namespace
std;
const
int n=15
;int a[55][55
];int dp[55][55][55][55
];int
main()
a[i][j]=v;
}for(int i1=1;i1<=n;i1++)
else}}
}}cout
return0;
}
OpenJudge8786 暴力DP 方格取數
設有n n的方格圖 n 10 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 p 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這...
OpenJudge P8786 方格取數 DP
總時間限制 1000ms 記憶體限制 65536kb 描述 設有n n的方格圖 n 10 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格...
8786 方格取數 (多執行緒dp)
題目描述 設有n n的方格圖 n 10 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這樣的路徑,使得...