對於這個最大子串行問題的話比較常用的是有三種解法:
1.直接暴力,列舉每乙個子串行,然後計算每乙個的子串行和,找出最大的序列和就行了。
for(int i=0;ifor(int j=i;jint thissum=0;
for(int k=i;k<=j;k++)
thissum+=a[k];
if(thissum>sum)
sum=thissum;
2.採用分治法,考慮到這個解的結構是i~j下元素的和,顯然是可以採用遞迴的,所以可以採用分治法
遞迴計算兩邊的方法,對於解的合併工作是:考慮到肯定包括了分界點,因為是從前半部分開始,結束於後半部分,所以分界點是一定要包括的,所以可以列舉從分界點開始到自己的一半的最大值,然後將這兩部分相加就是這個解了,
3.採用dp,對於dp首先要明白的是最優解的結構是i~j之間元素的和,然後採用陣列進行刻畫,得到這個狀態方程,max(i~j)a[i],這個整體是有起點和終點的,對於這個dp比較常用的是將其中乙個迴圈採用乙個陣列進行儲存,但是我們僅僅要這個最大的值的話我們可以直接更新這個值。
#include
#include
#include
#define min int_min
int data[1000010];
int main()
printf("%d\n",sum);
}return 0;
}
最大子串行和問題
問題 給定一整數序列a1,a2,an 可能有負數 求a1 an的乙個子串行ai aj,使得ai到aj的和最大 例如 整數序列 2,11,4,13,5,2,5,3,12,9的最大子串行的和為21。對於這個問題,最簡單也是最容易想到的那就是窮舉所有子串行的方法。利用三重迴圈,依次求出所有子串行的和然後取...
最大子串行和問題
問題描述 給定乙個整數序列 可能有負數 求一子串行 記為l 使得該子串行所有元素之和最大。例 給定序列 2,11,4,13,5,2,則最大子串行和為20 11,4,13 方法一 遍歷窮舉 o n 2 略方法二 分治遞迴 o n logn 思路 將輸入序列l分為左右兩個子串行l1和l2,則l 只可能以...
最大子串行和問題
問題描述 求 2,11,4,13,5,2 的最大子串行和。方法一 使用3層for迴圈巢狀,窮舉式的嘗試所有的可能,如下 public class demo1 return maxsum public static void main string args system.out.println 最大...