算法第三章上机实践报告

针对PTA上算法第三章实践中的第一题进行分析

实践题目:

  算法第三章上机实践报告

问题描述:

  

 

 

 

算法分析:

#include<iostream>
#include<cmath>
using namespace std;

int main(){
    int n;
    cin>>n;
    int a[101][101];
    int sum[101][101];
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        sum[n][i] = a[n][i];
    }
    for(int i=n;i>0;i--){
        for(int j=1;j<=i;j++){
            if(sum[i][j]>=sum[i][j+1]){
                sum[i-1][j] = a[i-1][j] + sum[i][j];
            }
            else{
                sum[i-1][j] = a[i-1][j] + sum[i][j+1];
            }
        }
    }
    cout<<sum[1][1];
}
时间、空间复杂度分析:

  时间复杂度为O(n^2),因为排序时所用的是二重循环,故而时间复杂度为O(n^2)。

  空间复杂度为O(1),因为在主函数中给变量分配的空间是常数,所以空间复杂度为O(1)。

心得体会:

  先分析了一会题目,打算采用从下至上,定义另一个二维数组,先将三角形最底层的各数值存进数组的第n行,然后通过两两比较,大的一方与上一行的数值相加后存进上一行的一维数组中,不断循环下去,第一行的数值sum[1][1]即为最大路径的值。

  略有欠缺的是在二维数组循环的时候,最先是由i=0开始的,导致后面有些判断、将最后一行的数值复制都出现了小小的错误,因而没法得出正确答案。后来不断修改,才知道从i=1更容易理解和编程。

 
  挺喜欢上机打题和结对编程的,可以不断交流,不断发现还有哪些地方不足,然后一步一步修改,直到算法最优,提交成功。

posted on 2019-10-20 20:17  WeN。  阅读(109)  评论(0编辑  收藏  举报