第二次上机实验报告

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:18  噢神  阅读(82)  评论(0编辑  收藏  举报