洛谷 P1216 [IOI 1994] 数字三角形 Number Triangles (记忆化搜索)

思路:

经典的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;
}
posted @ 2025-03-29 02:35  Yuhhhhh  阅读(28)  评论(0)    收藏  举报