[CodeQUEEN2023 Final E] Good Partition 题解
关于比赛
比赛链接:CodeQUEEN2023 决赛。
日本的一个非官方女生竞赛。
两个有趣的事实:
- 虽然这是女生竞赛,但是规则上写着——只要心理性别是女就可以参加决赛(
- 上次莆田市 CSP-S 集训 Day 2,@RSY 出的题,结果 T2 有歧义,导致一堆人(包括我)读错题意该题爆零(白送一个 Rank 1)。结果我们读错的题意居然就是这个 E……
题目解法
参考了
首先,我们可得任意一组
考虑为什么要这么定义。显然对于一段
观察到还有一个很重要的点,就是对于任意满足上面条件的
这样显然
至于怎么求最大值,滚动数组优化 DP 即可。时间复杂度
放代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){
ios::sync_with_stdio(false);
int n,x=0,y=-1e18,z=y; cin>>n;
while(n--){
int a; cin>>a;
int m=max({x,y+a,z-a});
y=max(y,x-a),z=max(z,x+a),x=m;
}
cout<<x<<endl;
return 0;
}