luogu 1121 環狀最大兩段子段和

2022-06-01 04:45:08 字數 848 閱讀 3267

題目大意:

乙個序列看做乙個環

選兩段數使它們和最大

思路:定義乙個dp陣列i j 0/1 表示前i個取了連續的j段 0/1表示取不取第i個

但是因為看做乙個環

首尾相接的情況可以看做是選三段,其中第乙個和最後乙個必須取

然後dp就好了

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

#define inf 2139062143

10#define ll long long

11#define maxn 200100

12using

namespace

std;

13 inline int

read()

1417

while(isdigit(ch))

18return x*f;19}

20int n,a[maxn],f[maxn][4][2

],ans;

21int

main()

22

34 ans=max(f[n][2][0],f[n][2][1

]);35 memset(f,128,sizeof

(f));

36 f[1][1][1]=a[1

];37

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

3846 printf("

%d",max(ans,f[n][3][1

]));

47 }

view code

洛谷1121環狀最大兩段子段和

題目描述 給出一段環狀序列,即認為a 1 和a n 是相鄰的,選出其中連續不重疊且非空的兩段使得這兩段和最大。輸入輸出格式 輸入格式 輸入檔案maxsum2.in的第一行是乙個正整數n,表示了序列的長度。第2行包含n個絕對值不大於10000的整數a i 描述了這段序列,第乙個數和第n個數是相鄰的。輸...

luoguP1121 環狀最大兩段子段和

給出一段環狀序列,即認為a 1 和a n 是相鄰的,選出其中連續不重疊且非空的兩段使得這兩段和最大。輸入格式 輸入檔案maxsum2.in的第一行是乙個正整數n n 2 105 n le 2 times 10 n 2 1 05 表示了序列的長度。第2行包含n個絕對值不大於10000的整數a i 描述...

P1121 環狀最大兩段子段和

p1121 環狀最大兩段子段和 給出一段環狀序列,選出其中連續不重疊且非空的兩段使得這兩段和最大。n 2e5 輸入樣例 1 複製 7 2 4 3 1 2 4 3 輸出樣例 1 複製 9 題解 一道好題 考慮兩種情況,o代表選擇 ooo ooo 正做一遍最大子段和,倒做一遍最大子段和兩者相加 ooo ...