求序列如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。和為20。
思路
最大和可能存在的位置:
#includeusing namespace std;
typedef long long ll;
const ll n=5e5,inf=0x3f3f3f3f;
ll n,s,a[n],mi[n],mx[n],maxv=-inf,minv=inf;
int main()
for (int i=1; i<=n; i++)
cout《其他可行演算法:把陣列複製乙份到末尾,求解rmq
51nod 迴圈陣列最大子段和
這個問題就是在原來的基礎上加上了可以迴圈。那麼我們可以分兩種情況處理,一種是有從尾到頭的,例如1表示取,0表示不取,則是11000011 一種是沒有跨越的,即000111100 那麼對於第二種情況可以直接用最大欄位和做,關鍵是第一段要怎麼處理。這裡需要用到逆向思維,在1110000111這乙個答案中...
迴圈陣列的最大子段和
time limit 1000 ms memory limit 65536 kib submit statistic problem description 給出乙個陣列,陣列首尾相連,詢問最大連續子段和為多少。input 首先輸入乙個t表示t 1 t 50 組資料,然後每組資料首先輸入乙個n 1 ...
51nod 迴圈陣列最大子段和 dp
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...