《第二次上机实验报告》

1.问题描述:
给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。
2.算法描述:
#include<iostream>
#include <cmath>
using namespace std;
    int main()
    {
        int D[100][100];
        int n;
        int maxSum[100][100];
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
                cin>>D[i][j];
        }
        for(int i = 1; i <= n; i++){
            maxSum[n][i]= D[n][i];
        }
        for(int i = n-1; i >= 1; i--){
            for(int j = 1; j <= i; j++){
                maxSum[i][j] = max(maxSum[i+1][j],maxSum[i+1][j+1]) + D[i][j];
            }
        }   
        cout << maxSum[1][1];
        return 0;
    }   
3. 算法时间及空间复杂度分析
这是一道动态规划问题,首先我们要列出递归方程,然后在按照递归方程填表。我们列的递归方程是从下往上填表的
4.心得体会:我的第一想法是从上至下,我当时有点过于坚持自己的想法,一心想把这个算法实现,纠结了好久也没能把他打出来,幸好我的算友及时指出我的错误,让我换了个思路重新实现代码,所以觉得结伴编程还是挺好的。

 

posted @ 2019-10-21 21:21  噢神  阅读(104)  评论(0编辑  收藏  举报