题目链接: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];
代码:
1 #include <bits/stdc++.h>
2 #define MAXN 510
3 using namespace std;
4
5 int main(void){
6 int n, a[MAXN][MAXN], dp[MAXN][MAXN];
7 cin >> n;
8 for(int i=0; i<n; i++){
9 for(int j=0; j<=i; j++){
10 cin >> a[i][j];
11 }
12 }
13 memset(dp, 0, sizeof(dp));
14 for(int i=n-1; i>=0; i--){
15 for(int j=0; j<=i; j++){
16 dp[i][j]=max(dp[i+1][j], dp[i+1][j+1])+a[i][j];
17 }
18 }
19 cout << dp[0][0] << endl;
20 return 0;
21 }