更難的矩陣取數問題

2021-08-09 13:49:42 字數 780 閱讀 1605

題目描述:

乙個m*n矩陣中有不同的正整數,經過這個格仔,就能獲得相應價值的獎勵,先從左上走到右下,再從右下走到左上。第1遍時只能向下和向右走,第2遍時只能向上和向左走。兩次如果經過同乙個格仔,則該格仔的獎勵只計算一次,求能夠獲得的最大價值。

例如:3 * 3的方格。

1 3 3

2 1 3

2 2 1

能夠獲得的最大價值為:17。1 -> 3 -> 3 -> 3 -> 1 -> 2 -> 2 -> 2 -> 1。其中起點和終點的獎勵只計算1次。

輸入第1行:2個數m n,中間用空格分隔,為矩陣的大小。(2 <= m, n <= 200)

第2 - n + 1行:每行m個數,中間用空格隔開,對應格仔中獎勵的價值。(1 <= a[i,j] <= 10000)

輸出輸出能夠獲得的最大價值。

輸入示例

3 31 3 3

2 1 3

2 2 1

輸出示例

17

#include#include#includeusing namespace std;  

#define inf 0x3f3f3f3f

#define maxn 201

int m[maxn][maxn];

int dp[maxn<<1][maxn][maxn];

int main()

printf("%d\n",dp[n+m-1][n-1][n-1]);

return 0;

}

dp 更難的矩陣取數問題

題目 乙個m n矩陣中有不同的正整數,經過這個格仔,就能獲得相應價值的獎勵,先從左上走到右下,再從右下走到左上。第1遍時只能向下和向右走,第2遍時只能向上和向左走。兩次如果經過同乙個格仔,則該格仔的獎勵只計算一次,求能夠獲得的最大價值。例如 3 3的方格。1 3 3 2 1 3 2 2 1 能夠獲得...

多路dp 更難的矩陣取數問題

解題關鍵 1 注意i和j的最大取值都是n,k是i與j的和。2 空間卡的很緊,多一位都不行。轉移方程 dp max a a 通過觀察,可以消去乙個變數,從而 dp k 1 max a a 然後再將相同的處理掉即可 1 include2 using namespace std 3 typedef lon...

51nod 更難的矩陣取數問題 滾動陣列優化

這裡要求要走到終點再走回來,可以轉化為兩個人走。那麼我們可以先粗暴的設f x1 y1 x2 y2 為第乙個人走到 x1,y1 第二個人走到 x2,y2 的最大價值。那麼這樣空間會很大,通過觀察可以發現,乙個走的步數 橫座標 縱座標,因為走一步一定是橫座標 或者縱座標 1.那麼我們就可以轉化為f st...