給定乙個整數序列,你需要找出兩個連續子段,保證這兩個子段不能重疊,並且使得這兩個子段中所有整數的和最大。
輸入描述:
包含一系列的測試用例。
第1行是乙個整數,表示測試用例的總數t,(1<=t<=30),第1行後面跟了乙個空行。
每個測試用例包括3行:
第1行是乙個整數,表示該整數序列的長度n,(2<=n<=5000);
第2行是乙個包含n個整數的序列:d1,d2,…dn,(|di|<=10000);
第3行是乙個空行。
輸出描述:
每個測試用例的輸出包括1行,即該測試用例的最大欄位和。
樣例輸入:310
1 -1 2 2 3 -3 4 -4 5 -5
5-5 9 -5 11 20
10-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
樣例輸出:
1340
-2暴力法
其中求最大子序和的子程式參考leetcode 53.最大子序和。
#include
#include
#include
using namespace std;
intfindsum
(vector<
int> num,
int begin,
int end)
return res;
}int
main()
}for
(int i =
0; i < n; i++
) res.
push_back
(maxsum);}
for(
int i =
0; i < res.
size()
; i++
)return0;
}
求最大子段和
給定乙個整數序列,你需要找到兩個連續子段,保證這兩個子段不能重疊,並且使得這兩個子段中 所有整數的和最大。輸入描述 包含一系列的測試用例,第1行是乙個整數,表示測試用例的總數t,1 t 30 每個測試用例包括3行 第1行是個整數,表示該整數序列的長度n,2 n 5000 第2行是乙個包含n個整數的序...
求m段最大子串行和
每日打卡 1 1 題目大意 求m段最大子串行和 題目思路 對於前i個數分成j組,可以得到最大的子串行和可以記為dp i j 那麼我們對於第i個數,有兩種方法 1 直接成為當前組的最後乙個,即dp i j dp i 1 j a i 2 或者我們新開一組,讓他成為第乙個,那麼前i 1個數就可以分成j 1...
最大子段和
設a 是n個整數的序列,稱為該序列的子串行,其中1 i j n.子串行的元素之和稱為a的子段和.例如,a 2,11,4,13,5,2 那麼它的子段和是 長度為1的子段和 2,11,4,13,5,2 長度為2的子段和 9,7,9,8,7 長度為3的子段和 5,20,4,6 長度為4的子段和 18,15...