思路:
经典的DP题,看题解大佬个个是状态转移方程...我就写个记忆化搜索吧,这个数据量,只dfs暴搜是过不去的,写完记忆化之后发现有个测试点T了,下载了一波测试点数据,发现全是0,那么初始化dp数组为-1就好了。
AcCode:
#include<bits/stdc++.h>
using namespace std;
int N, tower[1010][1010], dp[1010][1010];int dfs(int row, int col){if(row > N || col > row) return 0;if(dp[row][col]) return dp[row][col];dp[row][col] = max(dfs(row + 1, col), dfs(row + 1, col + 1)) + tower[row][col];return dp[row][col];
}int main(){memset(dp, -1, sizeof(dp));cin >> N;for(int i = 1; i <= N; i++){for(int j = 1; j <= i; j++){cin >> tower[i][j];}}int mx = dfs(1, 1);cout << mx;return 0;
}