50分,能看看哪儿错了吗
查看原帖
50分,能看看哪儿错了吗
386547
Infter楼主2022/8/12 20:48

用了三维DP

50%WA,50%AC

#include <iostream>
using namespace std;
const int maxn = 55;
int m, n;
int maze[maxn][maxn];
int f[maxn][maxn][maxn * 2]; // f[the first person's line][the second person's line][the step of now];
int main() {
    cin >> m >> n;
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> maze[i][j];
        }
    }
    // ok
    for (int k = 1; k <= m + n - 1; k++) {
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                int x1 = i;
                int y1 = k - i + 1;
                int x2 = j;
                int y2 = k - j + 1;
                f[i][j][k] = max(max(f[i - 1][j - 1][k - 1], f[i - 1][j][k - 1]), max(f[i][j - 1][k - 1], f[i][j][k - 1]));
                if (x1 != x2 or y1 != y2) {
                    f[i][j][k] += maze[x1][y1] + maze[x2][y2];
                } else {
                    f[i][j][k] += maze[x1][y1];
                }
            }
        }
    }
    cout << f[n][n][n + m - 1] << endl;
}
2022/8/12 20:48
加载中...