输入
第一行 n
后面 n 行是数据
输出:所有数据的和

注意点

  1. 数塔问题是从下往上
  2. 为了方便表示,可以从dp[1][1]开始

代码

  1. #include<algorithm>
  2. #include<vector>
  3. #include<cstdio>
  4. using namespace std;
  5. const int maxn = 1000;
  6. int fn[maxn][maxn], dp[maxn][maxn];
  7. int main(){
  8. int n;
  9. scanf("%d", &n);
  10. for(int i = 0; i < n; i++){
  11. for(int j = 0; j <= i; j++){
  12. scanf("%d", &fn[i][j]);
  13. }
  14. }
  15. //初始化DP数组
  16. for(int i = n - 1; i >= 0; i--){
  17. for(int j = 0; j <= i; j++){
  18. if(i == n - 1) dp[i][j] = fn[i][j];//最后一排等于最后一排
  19. else{
  20. dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + fn[i][j];
  21. }
  22. }
  23. }
  24. printf("%d", dp[0][0]);
  25. }