当前位置:   article > 正文

经典DP 数字三角形_dp三角形

dp三角形

 原题链接:

https://www.acwing.com/problem/content/900/icon-default.png?t=LA92https://www.acwing.com/problem/content/900/题目大意:

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。

                  例子:                          

 

输入格式

第一行包含整数 nn,表示数字三角形的层数。

接下来 nn 行,每行包含若干整数,其中第 ii 行表示数字三角形第 ii 层包含的整数。

输出格式

输出一个整数,表示最大的路径数字和。

数据范围

1≤n≤5001≤n≤500,
−10000≤三角形中的整数≤10000

输入样例:

  1. 5
  2. 7
  3. 3 8
  4. 8 1 0
  5. 2 7 4 4
  6. 4 5 2 6 5

输出样例:

30

 此题应从下面向上看,此时不会出现边界问题

利用c++自带的max函数来判断向上时的待加数

  1. for(int i=n;i>=1;i--){
  2. for(int j=i;j>=1;j--){
  3. a[i][j]=max(a[i+1][j],a[i+1][j+1])+a[i][j];
  4. }
  5. }

理解之后就简单了

上代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[510][510];
  4. int main(){
  5. int n;
  6. cin >> n;
  7. for(int i=1;i<=n;i++){
  8. for(int j=1;j<=i;j++){
  9. cin >> a[i][j];
  10. }
  11. }
  12. for(int i=n;i>=1;i--){
  13. for(int j=i;j>=1;j--){
  14. a[i][j]=max(a[i+1][j],a[i+1][j+1])+a[i][j];
  15. }
  16. }
  17. cout<< a[1][1] <<endl;
  18. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/927118
推荐阅读
相关标签
  

闽ICP备14008679号