为啥全WA了
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
const int N = 3010;
int n, m;
long long res = 1e18;
int loc[N][N];
int mem[N][N];
long long dfs(int x, int y) {
if (x > n) return 0;
if (mem[x][y] != -1) return mem[x][y];
long long res = 1e18;
if (y == 3) {
res = min(dfs(x + 1, y) + loc[y][x], dfs(x + 1, 1) + loc[y][x]);
} else {
res = min(dfs(x + 1, y) + loc[y][x], dfs(x + 1, y + 1) + loc[y][x]);
}
mem[x][y] = res;
return res;
}
int main() {
scanf("%d%d", &n, &m);
memset(mem, -1, sizeof(mem));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >> loc[i][j];
}
}
for (int i = 1; i <= m; i++) {
res = min(res, dfs(1, i));
}
printf("%lld", res);
return 0;
}
而且我还很疑惑的一个地方是,为啥memset一下就不会超时,但是我把mem去掉记忆化就会超时。