输入:
第一行 n
后面 n 行是数据
输出:所有数据的和
注意点
- 数塔问题是从下往上
- 为了方便表示,可以从dp[1][1]开始
代码
#include<algorithm>#include<vector>#include<cstdio>using namespace std;const int maxn = 1000;int fn[maxn][maxn], dp[maxn][maxn];int main(){ int n; scanf("%d", &n); for(int i = 0; i < n; i++){ for(int j = 0; j <= i; j++){ scanf("%d", &fn[i][j]); } } //初始化DP数组 for(int i = n - 1; i >= 0; i--){ for(int j = 0; j <= i; j++){ if(i == n - 1) dp[i][j] = fn[i][j];//最后一排等于最后一排 else{ dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + fn[i][j]; } } } printf("%d", dp[0][0]);}