洛谷 P1004 方格取數

2022-01-19 04:11:16 字數 1494 閱讀 6170

洛谷 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 0 0 0 4 0 0

0 0 15 0 0 0 0 0

0 14 0 0 0 0 0 0

0 0 0 0 0 0 0 0

b

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

此人從aa點到bb點共走兩次,試找出22條這樣的路徑,使得取得的數之和為最大。

輸入的第一行為乙個整數nn(表示n \times nn×n的方格圖),接下來的每行有三個整數,前兩個表示位置,第三個數為該位置上所放的數。一行單獨的00表示輸入結束。

只需輸出乙個整數,表示22條路徑上取得的最大的和。

輸入 #1

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

輸出 #1

67
noip 2000 提高組第四題

思路: 如果走一次用dp是比較好求的,可是題目要求走兩次,求最大和。所以二維dp有一定的難度,我想了半天沒有思路,然後看到題解說有四維dp,龜龜哦。還好這題資料量不大,不然四維不好過。主要方法就是讓兩個人同時走,開四層迴圈,狀態轉移公式為dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]))+mp[i[j]+mp[k][l];因為第乙個人走i,j路線只能從i-1,j;i,j-1;轉移。第二個人走k,l路線,只能從k-1,l;k,l-1進行轉移,再加上兩人新到達的位置的數即可。還有一點如果兩人走到了同乙個點,就要減去這個點的數字,因為多算了一次。**如下:

#include #define ll long long

using namespace std;

int const maxn=101;

int mp[10][10];

int dp[11][11][11][11]=;

int main()

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

}} }

cout《相似題目洛谷p1006傳紙條。

洛谷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 ...