算法第3章上机实践报告

1. 实践题目

7-1 数字三角形

 

2. 问题描述

计算出从三角形的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

 

3. 算法描述

    for(int i=1; i<=n; i++)
        for(int j=1; j<=i; j++){
            cin >> a[i][j];
            m[i][j] = a[i][j];//设置两个数组,一个保留为原来的数据,另外一个用来记录数据
        }
    for(int i = n-1; i >0 ; i--){
        for(int j = 1; j <= i; j++){ //自底向上记录数据
            m[i][j] +=max(m[i+1][j],m[i+1][j+1]); //选择大的数字进行相加
        }
    }
    cout << m[1][1] << endl;

 

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

时间复杂度分析:一共有4个for循环,两两组合在一起,其一组循环的时间复杂度为O(n*n) = O(n2),另一组循环的时间复杂度为O((n-1)*(n-1) = O(n2),总的时间复杂度为O(2n2) = O(n2)

空间复杂度分析:由于设置的是二维数组,所以空间复杂度为S(n2)

 

5. 心得体会:

一开始跟队友两个人的想法偏差较大,讨论了很久都没有结果,就先分开写代码,但是都存在一些问题,又再一起讨论,快下课的时候还是有点不太理解,就跟旁边的一组同学讨论了一下,最后得出。

posted @ 2018-11-05 19:51  liujieyu  阅读(140)  评论(0编辑  收藏  举报