AcWing 898. 数字三角形--记忆化搜索
原题链接
简单
作者:
无敌的拖拉机
,
2024-11-30 17:22:06
,
所有人可见
,
阅读 1
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
int d[N][N];
int g[N][N];
int n;
int dfs(int x, int y)
{
if(d[x][y] != -1e8)
return d[x][y];
if(x == n - 1)
return g[x][y];
int dx[] = {1, 1}, dy[] = {0, 1};
for(int i = 0; i < 2; i ++)
{
int xx = x + dx[i], yy = y + dy[i];
if(xx < n)
d[x][y] = max(d[x][y], g[x][y] + dfs(xx, yy));
}
return d[x][y];//记得返回
}
int main()
{
cin >> n;
for(int i = 0; i < n; i ++)
for(int j = 0; j <= i; j ++)
{
cin >> g[i][j];
d[i][j] = -1e8;//d数组不能初始化为-1因本题中数字可为-1
}
dfs(0, 0);
cout << d[0][0];
}