7-2 最大子段和 (40 分)
給定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
在這裡給出相應的輸出。例如:
20
給出一段序列,求其中一段連續序列的最大值。
遞推方程式:dp[i] += dp[i-1];
易知當一段序列和為負數的時候必定不會是最大值。
設定乙個a陣列將存放整數
在迴圈過程中,用乙個ans記錄最大值。
int n;
int a[10005];
while(scanf("%d",&n)!=-1)
cout《時間複雜度:1 + n * ( 1 + 1 + 1 * ( 1 + 1 ) ) + 1 = 1 + n + 1 =o(n)。
空間複雜度:1 + 1 + 1 + 1 =o(1)。
和隊友一起研究了一下,第一第二題基本大同小異,在第三題卡了很久,最後發現是區域性變數占用記憶體太多,設定全域性變數就解決了。
第三章實踐報告
1.實踐題目 7 1 數字三角形 30 分 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。2.問題描述 輸入有n 1行 第 1 行是數字三角形的行數 n,1 n 100。接下來 n行...
演算法第三章上機實踐報告
一 實踐題目 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個整...
演算法第三章上機實踐報告
7 1 數字三角形 30 分 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。1.路徑經過的數字總和最大 2.每一步可沿左斜線向下或右斜線向下 1 由題目可知從上到下,只能往左或者往右...