方格取數(dp)

2021-08-29 02:06:33 字數 1449 閱讀 7194

時間限制: 1 sec  記憶體限制: 128 mb

提交: 9  解決: 4

[提交][狀態][討論版][命題人:quanxing]

設有n×n的方格圖,我們在其中的某些方格中填入正整數,而其它的方格中則放入數字0。如下圖所示:

某人從圖中的左上角a出發,可以向下行走,也可以向右行走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。

此人從a點到b點共走了兩次,試找出兩條這樣的路徑,使得取得的數字和為最大。

第一行為乙個整數n(n≤10),表示n×n的方格圖。

接下來的每行有三個整數,第乙個為行號數,第二個為列號數,第三個為在該行、該列上所放的數。一行「0 0 0」表示結束。

第乙個整數,表示兩條路徑上取得的最大的和。

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
動態規劃經典題

#include #include 

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

int a[150][150

];int b[150][150

];int dp[150][150

];int

main()

dp[1][1]=a[1][1

];

for( i=2;i<=n;i++)

for(i=2;i<=n;i++)

}int s=dp[n][n];

i=n;j=n;

b[i][j]=0

;

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

while(i!=1||j!=1)//

回退看看是怎麼退過來的

else

if(i>=2&&dp[i][j]==a[i][j]+dp[i-1

][j])

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

// //cout

0,sizeof

(dp));

dp[1][1]=b[1][1

];

for(i=2;i<=n;i++)

for(i=2;i<=n;i++)

}cout

return0;

}

方格取數 DP

description 設有n n的方格圖 n 10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共...

方格取數(dp)

題目鏈結 大意 這題是數字三角形的高階版,數字三角形是從左上到右下路徑的最值,而這題是從左上到右下的任意兩條路徑的和的最值。思路 因為是兩條路徑每一步一定有兩個點 可能重合 所以可以根據閆氏dp分析法將狀態f i1,j1,i2,j2 表示為 兩條路徑分別走到 i1,j1 i2,j2 的所有路徑的和的...

方格取數(DP)

描述 設有n n的方格圖 n 10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條...