演算法第三章上機實踐報告

2022-05-07 03:45:10 字數 1306 閱讀 4406

一 . 實踐題目

7-2 最大子段和

給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。

要求演算法的時間複雜度為o(n)。

輸入格式:

輸入有兩行:

第一行是n值(1<=n<=10000);

第二行是n個整數。

例如:6

-2 11 -4 13 -5 -2

輸出格式:

輸出最大子段和。

例如:

二 . 問題描述

題目要求時間複雜度為o(n),並且序列全為負數時,輸出為0,這是動態規劃中的乙個典型問題,當遇到這種兩端都為變化的情況時需要固定一端進行分析。

三 . 演算法描述

描述:設定乙個陣列2,當shuzu2[j] > 0時,shuzu2[j+1] = shuzu2[j] + shuzu1[j+1];否則,shuzu2[j+1] = shuzu1[j+1];這樣從0到n迴圈一次,最終得到的陣列2中最大的值即為所求最大子段和。

**:

#include using

namespace

std;

intmain()

for(int i = 0; i < n; i++)

for(int j = 0; j < n; j++)

else

shuzu2[j+1] = shuzu1[j+1

]; }

intmax;

max = shuzu2[0

];

for(int i = 1; i < n; i++)

}if(max < 0

)

else

cout

<< max

}

四 . 時間複雜度分析

時間複雜度:o(n),得到陣列2使用了一次迴圈,查詢陣列2的最大值也使用了一次迴圈,所以時間複雜度為o(n)

空間複雜度:o(1),只使用了乙個一維陣列,所以為o(1)

五 . 心得體會

在結對程式設計的過程中,我和同伴可以一起討論提供思路,在做這道題的時候一開始不知道從何下手,後來想到了固定一端來簡化問題,我們就開啟了思路解決了這個問題,以後還是應該多看多練。

演算法第三章上機實踐報告

7 1 數字三角形 30 分 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。1.路徑經過的數字總和最大 2.每一步可沿左斜線向下或右斜線向下 1 由題目可知從上到下,只能往左或者往右...

演算法第三章上機實踐報告

引論 這是第二次在演算法課上的上機實踐了,雖然逐漸有了思考演算法的感覺,但這一次上機實踐還是並不輕鬆。關鍵在於在實驗課前對第三章的知識掌握得還不足夠,經常會因為明明知道理論上如何解題而苦於無法將其實現。不過,通過本次上機實踐,我的收穫是非常豐富的,下面用實踐課題目中的第一題 數字三角形 開始分享我的...

演算法第三章上機實踐報告

1.實踐題目 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時,定義子段和為0。要求演算法的時間複雜度為o n 2.問題描述 題目要求時間複雜度為o n 所以只能用乙個for迴圈解決問題,要用到動態規劃...