记忆化搜索求调

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

YHX2010 @ 2024-10-27 13:34:50

之前只写过dp,昨天J、S考完想练练记忆化搜索,提交上去只有55pts。

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 10;
int n, a[MAXN][MAXN], opt[MAXN][MAXN];
bool vis[MAXN][MAXN];
int dp(int x, int y) {
    if (x == n)return a[x][y];
    if (vis[x][y])return a[x][y];
    int res = max(dp(x + 1, y), dp(x + 1, y + 1)) + a[x][y];
    vis[x][y] = 1;
    return opt[x][y] = res;
}
int main() {
    memset(a, 128, sizeof a);
    memset(opt, 128, sizeof opt);
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++)
            cin >> a[i][j];
    cout << dp(1, 1) << endl;
    return 0;
}

求大佬指教


by WuJiaNuo19 @ 2024-10-27 13:36:48

vis数组那里 返回的应该是opt数组中的值。


by YHX2010 @ 2024-10-27 18:44:02

@WuJiaNuo19 谢谢


|