最大子串行和問題

2021-06-20 09:24:08 字數 710 閱讀 7195

對於這個最大子串行問題的話比較常用的是有三種解法:

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 最大...