問題描述:對給定陣列a,尋找a的和最大的非空連續子陣列。
輸入格式:輸入的第一行包括乙個整數n,代表陣列中的元素個數,接下來的一行包含n個整數(可以包含負數),以空格分隔。
輸出格式:乙個整數,表示最大的連續子陣列的和。
樣例輸入:
9
2 4 -7 5 2 -1 2 -4 3
樣例輸出:
思路:1.分治法
分解:把陣列從中間位置劃分成兩個子陣列。
解決:使用分治法遞迴地求解這兩個子陣列的最大子陣列。當規模縮小到子陣列長度為1時,直接返回該元素的值。
合併:求解跨越兩個子陣列的最大子陣列,即跨越這個相鄰子陣列合成的陣列中點的最大子陣列,並與之前得到的結果進行比較,選取和最大者。
時間複雜度:o(nlogn)
code:
#include#includeusing
namespace
std;
vector
a;intn;
int solve(int l, int
r)
for (int i = mid+1; i <= r; i++)
return max(max(maxl, maxr), maxsuml+maxsumr);
}int
main()
2.動態規劃
dp[n] 表示以第n個數為結尾的最大子列和。
dp[n] = max(0, dp[n-1]) + a[n]。
時間複雜度為o(n)
#includeusingnamespace
std;
intn;
intmain()
cout
}
最大子列和
int maxsubsequencesum const int a,int n if thissum maxsum 如果新的子列和更大,則更新子列和 maxsum thissum return maxsum 時間複雜度o n3 int maxsubsequencesum const int a,in...
最大子列和
給出乙個長度為 n 的序列 a,選出其中連續且非空的一段使得這段和最大。第一行是乙個整數,表示序列的長度 n。第二行有 n 個整數,第 i個整數表示序列的第 i個數字 a i 輸出一行乙個整數表示答案。輸入7 2 4 3 1 2 4 3 輸出資料範圍 對於 40 的資料,保證 n leq 2 tim...
最大子列和
最大連續子串行和問題 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大連續子串行和即為20。注 為方便起見,如果所有整數均為負數,則最大子串行和為0。解決這樣乙個問題是乙個很有趣的過程,我們可以...