51nod 1050 迴圈陣列最大子段和

2022-06-20 21:54:09 字數 790 閱讀 9487

題意:

思路:情況無非分為兩種:

①正常的最大子段和。

②首尾相連的最大子段和,此時中間的那段肯定是最小子段和,用總的sum-最小子段和即可。

最後比較兩者大小。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

using

namespace

std;

1112 typedef long

long

ll;13

const

int maxn=50000+5;14

15int

n;16

ll a[maxn];

17ll d[maxn];

1819

intmain()

2030 ll max=0,min=0x3f3f3f3f

;31 d[0]=0;32

for(int i=1;i<=n;i++)

3337 d[0]=0;38

for(int i=0;i<=n;i++)

3943 printf("

%lld\n

",max(max,sum-min));44}

45return0;

46 }

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...