Накладная

Существенной проблемой является непересекающиеся пути от верхнего левого угла до нижнего правого угла двух Чжин, максимальный вес

1-- динамического программирования (II, процесс динамического программирования) блок-схема, стоимость или сетки

Перенесите его, чтобы определить, хорошее состояние

 

 

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define maxn 60 
using namespace std;
int dp[maxn*2][maxn][maxn];
int map[maxn][maxn];
int n, m;

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			scanf("%d", &map[i][j]);
		}
	}
	for (int i = 2; i <= n + m; i++) {
		for (int x = max(1, i - m); x <= n && x < i; x++) {
			for (int y = max(1, i - m); y <= n && y < i; y++) {

				int t = map[y][i - y];
				t += map[x][i - x];

				if (x != y || i == 2 || i == n + m ) {
					dp[i][x][y] = max(dp[i][x][y], dp[i-1][x][y] + t);
					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;
}

  

рекомендация

отwww.cnblogs.com/lesning/p/11988522.html