最大子串行和(分治求法)

2021-08-17 07:21:37 字數 836 閱讀 3556

這已經是一道家喻戶曉的題了,給出乙個陣列,裡面是一串數字,求出子串行中和最大的,輸出這個和。

思路:這道題有很多經典解法,其中最典型應該是動態規劃,而我們今天要討論的是用二分法怎麼求解這道題。

#include

using namespace std;

int aleng;

int f(int a,int begin,int end)

//求出左邊一段的最大子串行和,

//求出右邊一段的最大子串行和,

//求出由中間向兩邊擴充套件的最大子串行的和。

//最後再比較這三者中最大的那個,就是我們要求出的答案了。

int k=(begin+end)/2;

int t1=f(a,begin,k);

int t2=f(a,k,end);

int t3a=0;

int sum=0;

//好好領略下面這一段**的程式設計思想。

for(int i=k-1;i>=begin;i--)

int t3b=0;

sum=0;

for(int i=k;iif(sum>t3b)t3b=sum;

}int t3=t3a+t3b;

intmax=0;

if(t1>max)max=t1;

if(t2>max)max=t2;

if(t3>max)max=t3;

return

max;

}int work(int a)

int main();

aleng=sizeof(a)/sizeof(int);

cout0;}

最大子串行和的求法

定義 給定整數a1a a1 a2a a2 a3a a3 ana an 可能有複數 求 k ijak sum ja k ij ak 的最大值 為方便起見,如果所有整數均為負數,則最大子串行和為0 演算法一 int maxsubsequencesum const int a,int n return m...

分治演算法 連續最大子串行和問題

最大連續子串行和問題 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個。這個問題的求解思路有很多,可以暴力求解時間複雜度o n3 也可以使用動態規劃求解時間複雜度o n 下面的 是採用的分治遞迴求解的時間複雜度o nlogn def ...

暴力 分治 貪心 DP 最大子串行和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6 暴力 暴力列舉所有可能的連續子陣列,演算法複雜度o n 3 演算法1 1 int maxsubs...