題目大意:
乙個序列看做乙個環
選兩段數使它們和最大
思路:定義乙個dp陣列i j 0/1 表示前i個取了連續的j段 0/1表示取不取第i個
但是因為看做乙個環
首尾相接的情況可以看做是選三段,其中第乙個和最後乙個必須取
然後dp就好了
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9view code#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 }
洛谷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 ...