题解:P12709 [KOI 2021 Round 1] 采蜜

· · 题解

有三种情况:

注意不要采集两只蜜蜂起点位置的蜂蜜。

答案就是两只蜜蜂能采到的蜂蜜总和的最大值。

由于 n 比较大,求区间和就使用前缀和优化。

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
#define mod 998244353
#define ll long long
int n, a[N], b[N], ans;
main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[i]=b[i-1]+a[i];//前缀和数组
    }
    for(int i=2;i<n;i++) ans=max(ans, (b[n]-b[1]-a[i])+(b[n]-b[i]));
    for(int i=2;i<n;i++) ans=max(ans, (b[n-1]-a[i])+b[i-1]);
    for(int i=2;i<n;i++) ans=max(ans, (b[i]-b[1])+(b[n-1]-b[i-1]));
    cout<<ans;
}