算法第三章上機實踐報告

針對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

 
  挺喜歡上機打題和結對編程的,能夠不斷交流,不斷髮現還有哪些地方不足,而後一步一步修改,直到算法最優,提交成功。
相關文章
相關標籤/搜索