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 谢谢