Существенной проблемой является непересекающиеся пути от верхнего левого угла до нижнего правого угла двух Чжин, максимальный вес
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; }