题目链接
大致题意:
给你一个大小为 n 的数组,最多执行操作一次:反转任意一个连续的子数组。
最后求 所有偶数位上的最大和。
解题报告:
#include<bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn=1e6+5;
const int inf=0x3f3f3f3f;
const LL MOD=1e9+7;
int p[maxn];
LL sum1[maxn],sum2[maxn];
int main() {
int T, n;
scanf("%d", &T);
while (T--) {
LL ans = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &p[i]);
if (i % 2 == 0) ans += p[i];
}
LL tmp1 = 0, ant = 0, tmp2 = 0;
for (int i = 0; i < n; i += 2) {
if (i + 1 < n) {
tmp1 += p[i + 1] - p[i];
if (tmp1 < 0) tmp1 = 0;
ant = max(ant, tmp1);
}
if (i != 0) {
tmp2 += p[i - 1] - p[i];
if (tmp2 < 0) tmp2 = 0;
ant = max(ant, tmp2);
}
}
printf("%lld\n", ans + ant);
}
return 0;
}