算法第三章上机实践报告

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

实践题目:算法

  算法第三章上机实践报告编程

问题描述:数组

  

 

 

 

算法分析:函数

#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)。spa

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

心得体会:排序

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

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

 
  挺喜欢上机打题和结对编程的,能够不断交流,不断发现还有哪些地方不足,而后一步一步修改,直到算法最优,提交成功。
相关文章
相关标签/搜索