本質的な問題は、左上から2ジンの右下隅、最大重量に独立経路であります
1--動的プログラミング(IIプロセス動的プログラミング)コストフローチャートまたはグリッド
良好な状態を決定するためにそれを転送
書式#include <iostreamの> 書式#include <CStringの> 書式#include <アルゴリズム> 書式#include <cstdioを> #define MAXN 60 名前空間stdを使用。 int型DP [MAXN * 2] [MAXN] [MAXN]。 int型マップ[MAXN] [MAXN]。 整数N、M。 INTメイン(){ scanf関数( "%D%D"、&N、&M)。 以下のために(INT I 1 =; I <= N; I ++){ {(J ++; J <= M INT J = 1)のために scanf関数( "%d個"、&マップ[I] [J])。 } } 以下のために(INT I 2 =; I <= N + M; I ++){ (INT X = MAX(1、I - M); X <= N && X <I; X ++)のために{ { - のために(Y ++; Y <= N && Y <I M)のint Y = MAX(1、I) INT T =マップ[Y] [I - Y]。 T + =マップ[X] [I - X]。 IF(X!= Y || I == 2 || I == N + M){ DP [I] [X] [Y] =(DP [I] [X] [Y]、DP [I-1] [X] [Y] + T)MAX。 DP [I] [X] [Y] = MAX(DP [I] [X] [Y]、DP [I - 1] [X - 1] [Y] + T)。 dp[i][x][y] = max(dp[i][x][y], dp[i - 1][x][y - 1] + t); dp[i][x][y] = max(dp[i][x][y], dp[i - 1][x - 1][y - 1] + t); } } } } printf("%d\n", dp[m + n][n][n]); return 0; }