算法第三章上机实验报告

1.问题描述:
给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

2.算法描述:

#include<iostream>

#include<cmath>

usingnamespace 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];

        return0;

    }   

3. 算法时间及空间复杂度分析

这是一道动态规划问题,首先我们要列出递归方程,然后在按照递归方程填表。我们列的递归方程是从下往上填表的

4.心得体会:我是负责看他打代码的,一开始我们的思路出现了矛盾,他的想法是自上而下,然后代码上出现了混乱,然后找不到跳出来的思路,最后按照我的思路完成了代码。所以小组合作是有必要的,取长补短。有的更擅长打代码,有的在思想上更擅长,互相学习。

posted @ 2019-10-20 20:04  dinglili  阅读(143)  评论(0编辑  收藏  举报