大佬求调(记忆化
  • 板块P1130 红牌
  • 楼主yaokuangda
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/3/17 22:42
  • 上次更新2024/3/18 14:52:40
查看原帖
大佬求调(记忆化
1037170
yaokuangda楼主2024/3/17 22:42

为啥全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去掉记忆化就会超时。

2024/3/17 22:42
加载中...