矩陣取數問題 V2 51Nod 1084

2021-09-02 03:57:19 字數 660 閱讀 6998

考慮dp的話 最笨的方法就是dp[i][j][x][y]代表第一條路走到(i,j) 第二條路走到(x,y)時的最大值 dp[n][m][n][m]即為所求

轉移方程:dp[i][j][x][y]=max(dp[i-1][j][x-1][y],dp[i-1][j][x][y-1],dp[i][j-1][x-1][y],dp[i][j-1][x][y-1])+e[i][j]+e[x][y]*(!(i==x&&j==y))

但是只有當(i+j)==(x+y)時 方程的轉移才是有效的 所以外迴圈改為步數 內兩層迴圈為兩條路的橫座標 縱座標直接通過步數算出來

#include using namespace std;

const int maxn=2e2+10;

const int maxm=2e2+10;

const int maxs=4e2+10;

int dp[maxs][maxn][maxm];

int e[maxn][maxm];

int n,m;

int main()

}for(k=1;k<=n+m-1;k++)}}

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

return 0;}/*

2 21 2

2 1*/

矩陣取數問題 V2 (51Nod 1084 )

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

51nod1078 矩陣取數問題 V2

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

51nod1084 矩陣取數問題 V2

o n4 o n3 媽呀為什麼跑這麼慢woc include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i define...