input示例
6output示例-211
-413
-5-2
20分析:
有兩種可能,第一種為正常從[1 - n]序列中的最大子字段和;第二種為陣列的total_sum - ([1-n]序列中的最短序列和)
最後結果為 max 。
對於第二種:
迴圈陣列求最大子段和,可能出現中間的一部分不要,要兩邊的數。比如:-1 4 -1 -5 5 -2 1 -1 3,他的最大子段和就為 左邊的-1 4加上右邊的5 -2 1 -1 3,也就是,去掉1 -5這一段後的結果。而-1 -5這一段其實是最小字段和(序列總和一定,總和 - 最大子段和 = 最小子段和)
#include "iostream
"#include
"cstdio
"using
namespace
std;
#define ll long long
#define n 50010
intarr[n];
intmain()
ll ans=0
;
for(int i=0;i)
printf(
"%lld\n
",ans);
}return0;
}
51nod 1050 迴圈陣列最大和
感覺自己的碼力還很差 思維愚鈍 一開始把他搞成2倍長度來做 然後列舉每乙個始點加長度為n的陣列跑乙個dp 這樣複雜度高達o n 2 實際上我們可以分析一下 這個max有可能在1 n內取到 也有在迴圈陣列中取到 所以我們先跑一段1 n的dp 記為ans1 然後我們跑一段迴圈陣列內的dp 記為ans2 ...
51nod 1050 迴圈陣列最大子段和
n個整數組成的迴圈序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續的子段和的最大值 迴圈序列是指n個數圍成乙個圈,因此需要考慮a n 1 a n a 1 a 2 這樣的序列 當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,13...
51nod 1050 迴圈陣列最大子段和
51nod 1050 迴圈陣列最大子段和 最大子段和的公升級版,有乙個可以迴圈的子段,也就是首尾可以相連,如果首尾相連,那麼中間空出來的一段就是應該是最小字段和。那麼答案應該是從原版得出的值和首尾相接得出的值取最大的即可。include include include include include...