時間限制: 1 sec
記憶體限制: 128 mb
提交: 224
解決: 54 [
提交][
狀態][
討論版]
給定乙個n個整數組成的序列,整數有正有負,找出兩段不重疊的連續子串行,使得它們中整數的和最大。兩段子序列都可以為空。
多組輸入,每組第一行為n,表示序列的長度;第二行為n個整數(-1000<=n<=1000),表示輸入序列。 0
對於每組輸入,輸出一行,僅乙個整數,表示最大的和。
9185 -580 -889 701 964 -878 353 -761 608
2273
第一步,求出最大子串行m;m表示max第二步,求出不與m相交的第二大子串行s;s表示second
第三步,求出m中的最小子序列l;l表示little
最後,分兩種情況:m+s或者是m一分為二;
若s+l<0,說明l太小了,m應該捨棄l,一分為二;
否則,m+=s;
#includeusing namespace std;
int a[1000007];
int m[1000007];
int from, to;
int m, s, l;
int n;
void init()
else
if (m < m[i]) }}
void gets()
int now = a[to + 1];
for (i = to + 2; i < n; i++)
else
if (now > mm)mm = now;
} s = mm;
}void getl()
else
if (now < ll)ll = now;
} l = ll;
}int main()
init();
gets();
getl();
if (s + l < 0)
else
printf("%d\n", m);
} return 0;
}
最大子串行問題
問題描述 輸入一組整數,求出這組數字子串行和中最大值。也就是只要求出最大子串行的和,不必求出最大的那個序列。例如 序列 2 11 4 13 5 2,則最大子串行和為20。複雜度為o n 2 的演算法 include include int maxsubseqsum const int a,int n...
最大子串行問題
現在我們將敘述兩個演算法來求解最大子串行和問題 include int maxsubsequencesum int a,int n int main printf max d maxsubsequencesum a,15 return0 int maxsubsequencesum int a 15 ...
最大子串行問題
題目 給定乙個整數列 可能有負數 求該整數列每個子串行的和的最大值,如果都為負數則結果為0 例如 對於輸入 2,11,4,13,5,2 答案為20 從11 到 13,即就是 11 4 13 20 粗略 如下 已測試通過 include using namespace std arr 目標陣列,len...