解法一:暴力解法,把所有的連續子列和求出來。但是如何才能把所有的子列和表示出來呢?
兩個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。現要求你編寫程式,計算給定整數序列的最大子列...