当前位置:   article > 正文

数字三角形问题(动态规划)

数字三角形问题

                                            G . 数字三角形问题 


Description

给定一个由nn行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。

对于给定的由nn行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。

Input

第1 行是数字三角形的行数nn,1≤n≤1001≤n≤100。接下来nn行是数字三角形各行中的数字。所有数字在0..99之间。

Output

将计算结果输出,表示计算出的最大值。

Samples

Input 

 

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

Output

30

 典型的动态规划(线性dp)

下边我弄了两个表格给大家说明如何去动态规划:

输入的num数组
7
38
810
2744
45265

第一次的dp
7
38
810
7121010
第二次dp
7
38
201310
第三次dp
7
2321
第四次dp
30

根据所给的三角行,上一行的数只能取下一行的两个数:

我们根据这个给出代码,大家可以参照上面的表格和我写的代码进行分析

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int dp[1000][1000];
  4. int num[101][101];
  5. int main()
  6. {
  7. int n,m;
  8. cin>>n;
  9. for(int i=1;i<=n;i++)
  10. {
  11. for(int j=1;j<=i;j++)
  12. {
  13. cin>>num[i][j];
  14. dp[i][j]=num[i][j];
  15. }
  16. }
  17. for(int i=n-1;i>=1;i--)
  18. {
  19. for(int j=1;j<=i;j++)
  20. {
  21. dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
  22. }
  23. }
  24. cout<<dp[1][1];
  25. return 0;
  26. }

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

闽ICP备14008679号