OpenJudge 8786 方格取數 dp入門)

2022-07-22 13:51:27 字數 1249 閱讀 1840

位址

描述設有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條這樣的路徑,使得...