题解:贪心策略,一个偶数必然要匹配一个奇数,不然中间相差的个数不会构成一个完美括号匹配,初始对b数组进行求和sum,再次对奇数项、偶数项分别对a[i] - b[i]从大到小排序,然后两者都对sum相加(去除b数组中小值的影响) , 每次操作取最大值。
code:
/*
time 2020/10/24
author by Jade
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NMAX = 2e5 + 10;
const int MOD = 1e9 + 7;
int c[NMAX] , a[NMAX] , b[NMAX];
int main(int argc, char const *argv[])
{
int n , val,a_ind =0, b_ind = 0;
scanf("%d",&n);
for(register int i = 1;i <= n;i++) scanf("%d",c+i);
ll ans = 0 , sum = 0;
for(register int i = 1;i <= n;i++)
{
scanf("%d",&val);
if(i & 1)
a[++a_ind] = c[i] - val;
else
b[++b_ind] = c[i] - val;
sum += val;
}
ans = sum;
sort(a + 1,a + a_ind + 1 , greater<int>());
sort(b + 1,b + b_ind + 1 , greater<int>());
for(register int i = 1;i <= a_ind;i++)
{
sum += a[i] + b[i];
ans = max(ans , sum);
}
printf("%lld
",ans );
return 0;
}