之前只写过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;
}
求大佬指教