最大子串行和

2021-08-16 00:01:08 字數 1019 閱讀 9342

本部落格部分摘選自《演算法筆記》(胡凡 曾磊主編,機械工業出版社)

一、動態規劃

動態規劃(dynamic programming,簡稱dp)是把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量

二、最大子串行和

如果該問題用暴力破解方法來解決問題,列舉左右端點需要o(n^2)的複雜度,計算兩端點之和需要o(n)的複雜度,總的需要o(n^3)複雜度。如果使用字首和的方法,仍然有o(n^2)的複雜度,當n過大時候是不可承受的。本題的最佳解法是使用動態規劃,時間複雜度可以達到o(n)。

假設max[i]表示以a[i]結尾的最大子串行和,而max[i]的求法根據max[i-1]和a[i]來確定:

1)如果序列只有乙個元素,那麼max[i] = a[i]

2)如果序列有多個元素,那麼max[i] = max[i-1]+a[i]

所以max[i] = max,這個公式就是動態規劃的地推公式,也是動態規劃的難點。

最終整個序列的最大子串行和就是求max陣列中的最大元素,例如序列-2、11、-4、13、-5、-2

max[0] = -2

max[1] = 11

max[2] = 7

max[3] = 20

max[4] = 15

max[5] = 13

所以該序列的最大子串行和是max[3] = 20

三、**

public static int maxsubsum(int a)

}return result;

}/* 取兩個數的最大值*/

public static int

max(int i,int j)

return i;

}

和最大子串行

問題描述 第一行輸入乙個正整數n 1 n 100001 第二行輸入n個整數a 0 a 10000 求該組整數子串行最大的和。解決這個問題應該考慮輸入n較大的情況,也就是說,輸入100000個數字判斷它的和最大子串行應當也能很快地算出來。我看過很多求解的 有三重for迴圈的,有兩重for迴圈的,也有使...

最大子串行和

最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最後找到和最大的子...

和最大子串行

時間限制 1 sec 記憶體限制 512 mb 提交 3 解決 3 提交 狀態 討論版 對於乙個給定的長度為n的整數序列a,它的 子串行 的定義是 a中非空的一段連續的元素 整數 你要完成的任務是,在所有可能的子串行中,找到乙個子串行,該子串行中所有元素的和是最大的 跟其他所有子串行相比 程式要求你...