01 複雜度1 最大子列和問題 兩種解法

2021-10-22 12:02:37 字數 1260 閱讀 2970

解法一:暴力解法,把所有的連續子列和求出來。但是如何才能把所有的子列和表示出來呢?

兩個for迴圈。依次求出以陣列下標為0的元素為起始的的所有連續子列和,再接著求出以陣列下標為1的元素為起始的的所有連續子列和……

第乙個for迴圈為了把所有元素走一遍,第二個for迴圈是求出含有sequence[i]的所有子列和,即從位置i依次+1直到位置k-1,分別求出所有的子列。

//暴力解法,把所有的子列和求出來。 

#include

intmain()

for(

int i=

0;iprintf

("%d"

,maxsequencesum)

;return0;

}

第二種解法:分而治之。

利用遞迴。求左半邊的最大子列和、右半邊的最大子列和、跨越邊界的最大子列和,再求三者的最大值。對我來說,難點是如何設定遞迴函式的引數!對這個例子,對邊界的考慮時,要考慮乙個可到達的簡單邊界、結束條件、上次的結果與下次結果的關係。

//遞迴求解。

#include

intmaxnumber

(int a,

int b,

int c)

intmaxsum

(int list,

int head,

int tail)

int center=

(head+tail)/2

;int a,b,c;

int tep1=

0,tepleft=

0,tep2=

0,tepright=0;

a=maxsum

(list,head,center)

; b=

maxsum

(list,center+

1,tail)

;for

(int i=center;i>=head;i--

)for

(int i=center+

1;i<=tail;i++

) c=tepleft+tepright;

return

maxnumber

(a,b,c);}

intmain()

printf

("%d"

,maxsum

(sequence,

0,k-1)

);return0;

}

01 複雜度1 最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...

01 複雜度1 最大子列和問題

01 複雜度1 最大子列和問題 給定k 個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入第1行給出正整數k 100 000 第2行給出 k個整數...

01 複雜度1 最大子列和問題

01 複雜度1最大子列和問題 20分 給定kk 個整數組成的序列,連續子列 被定義為n i 1 n jn j 其中 1 le i le j le k1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列...