51nod1102(数塔)

时间:2023-11-25 14:16:56

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1002

题意:中文题诶~

思路:简单dp

从底层往上递推,每个节点的最大和为当前节点的值加上两个儿子中较大的值;

状态转移方程式为:dp[i][j]=max(dp[i+1][j], dp[i+1][j+1])+a[i][j];

代码:

 #include <bits/stdc++.h>
#define MAXN 510
using namespace std; int main(void){
int n, a[MAXN][MAXN], dp[MAXN][MAXN];
cin >> n;
for(int i=; i<n; i++){
for(int j=; j<=i; j++){
cin >> a[i][j];
}
}
memset(dp, , sizeof(dp));
for(int i=n-; i>=; i--){
for(int j=; j<=i; j++){
dp[i][j]=max(dp[i+][j], dp[i+][j+])+a[i][j];
}
}
cout << dp[][] << endl;
return ;
}