CodeForces 1373 - D. Maximum Sum on Even Positions - 分类求最大连续子段和 ,思维

题目传送门:D. Maximum Sum on Even Positions

题目大意

给定一个数组,至多翻转一个子数组,使得偶数下标元素之和ans最大,输出ans(注意题目的数组下标从0开始)

思路

很显然我们要翻转偶数长度的子数组(因为奇数长度数组两端下标奇偶性相同,数组奇偶性呈中心对称,翻转之后奇数下标仍为奇数下标,偶数下标仍为偶数下标,那么翻转是无意义的),翻转之后奇偶下标互换

我们希望偶数下标元素之和最大,那么我们就要使翻转的数组中sum_奇 - sum_偶最大(因为翻转的数组下标奇偶性互换),想一想这不就是最大连续子段和吗?

但是需要注意的是我们要分别针对奇数下标开始的偶数下标开始的子数组求最大子段和(因为长度为偶数)

那么最后答案就是ans = 原数组sum_偶 + 子数组max(sum_奇 - sum_偶)

代码

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
type
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值