\(\mathcal{Description}\)

  Link.

  给定一个长为 \(n\) 的非负整数序列 \(\lang a_n\rang\),你可以进行如下操作:

  • 取 \([l,r]\),将其中所有 \(a\) 值 \(-1\);
  • 取 \([l,r]\),将其中奇数下标的 \(a\) 值 \(-1\);
  • 取 \([l,r]\),将其中偶数下标的 \(a\) 值 \(-1\)。

  求至少需要几次操作使得所有 \(a\) 值变为 \(0\)。

  \(n\le10^5\),数据组数 \(T\le10\)。

\(\mathcal{Solution}\)

  道路铺设永放光芒!

  记集族 \(\mathcal I\) 包括所有一次操作可能涉及的下标集合,写出线规

\[\operatorname{minimize}~~~~z=\sum_{P\in \mathcal I}x_P\\
\operatorname{s.t.} \begin{cases}
\forall u,~\sum_{P\ni u}x_P\ge a_u\\
\forall u,~-\sum_{P\ni u}x_P\ge -a_u\\
\forall P,~x_P\ge 0
\end{cases}
\]

转对偶

\[\operatorname{maximize}~~~~z'=\sum_{u=1}^na_u(s_u-t_u)\\
\operatorname{s.t.}\begin{cases}
\forall P,~\sum_{u\in P}(s_u-t_i)\le1\\
\forall u,~s_u,t_u\ge0
\end{cases}
\]

  令 \(d_u=s_u−t_u\),由第一个约束,显然有 \(d_u\le1\);而为最大化 \(\sum_{u=1}^na_ud_u\),可以得到 \(d_u\in\{-1,0,1\}\)。那么就能简单 DP:令 \(f(i,x,y,z)\) 表示考虑了 \(d_{1..i}\),一类/二类/三类操作涉及的操作集合中,最大后缀 \(d\) 之和为 \(x/y/z~(\in\{0,1\})\),枚举 \(d_u=1,2,3\) 分别转移即可。

  复杂度 \(\mathcal O(Tn)\)(其实带一个 \(\ge \log n\) 的 \(24\) 倍常数 qwq)。

\(\mathcal{Code}\)

/*~Rainybunny~*/

#include <cstdio>
#include <cstring> #define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) typedef long long LL; inline int rint() {
int x = 0, f = 1, s = getchar();
for ( ; s < '0' || '9' < s; s = getchar() ) f = s == '-' ? -f : f;
for ( ; '0' <= s && s <= '9'; s = getchar() ) x = x * 10 + ( s ^ '0' );
return x * f;
} template<typename Tp>
inline void wint( Tp x ) {
if ( x < 0 ) putchar( '-' ), x = -x;
if ( 9 < x ) wint( x / 10 );
putchar( x % 10 ^ '0' );
} template<typename Tp>
inline void chkmax( Tp& a, const Tp& b ) { a < b && ( a = b, 0 ); }
inline int imax( const int a, const int b ) { return a < b ? b : a; } const int MAXN = 1e5;
const LL LINF = 1ll << 60;
int n, a[MAXN + 5];
LL f[MAXN + 5][2][2][2]; int main() {
for ( int T = rint(); T--; ) {
n = rint();
rep ( i, 1, n ) a[i] = rint(); memset( f, 0xc0, sizeof f );
f[0][0][0][0] = 0;
rep ( i, 1, n ) rep ( w, -1, 1 ) {
rep ( x, 0, 1 ) rep ( y, 0, 1 ) rep ( z, 0, 1 ) {
if ( w + x <= 1 && w + ( i & 1 ? y : z ) <= 1 ) {
chkmax( f[i][imax( imax( w, w + x ), 0 )]
[i & 1 ? imax( imax( w, w + y ), 0 ) : y]
[i & 1 ? z : imax( imax( w, w + z ), 0 )],
f[i - 1][x][y][z] + w * a[i] );
}
}
} LL ans = -LINF;
rep ( x, 0, 1 ) rep ( y, 0, 1 ) rep ( z, 0, 1 ) {
chkmax( ans, f[n][x][y][z] );
}
wint( ans ), putchar( '\n' );
}
return 0;
}

Solution -「ZJOI 2020」「洛谷 P6631」序列的更多相关文章

  1. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  2. 洛谷 P1628 合并序列

    洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...

  3. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  4. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  5. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  6. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  7. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

  8. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

  9. 「BZOJ2733」「洛谷3224」「HNOI2012」永无乡【线段树合并】

    题目链接 [洛谷] 题解 很明显是要用线段树合并的. 对于当前的每一个连通块都建立一个权值线段树. 权值线段树处理操作中的\(k\)大的问题. 如果需要合并,那么就线段树暴力合并,时间复杂度是\(nl ...

随机推荐

  1. PowerShell 管道符之Where-Object的使用方法

    1 Get-Process|Select-Object -Property Name|Where-Object{$_ -match 'QQ'} 可以匹配到QQ为名的结果

  2. dispatcher-servlet.xml文件配置模板

    完整代码如下: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:/ ...

  3. websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用

    1.前言 描述一下今天用websocket踩得坑  --->空指针异常! 我想在websocket里面使用service 层的接口,从中获取数据库的一些信息  , 使用 @Autowired 注 ...

  4. Go语言系列之知识框架

    一.Go基础入门知识 二.变量和基本数据类型 三.流程控制语句 四.数组和切片 五.map的声明和使用 六.函数func方法 七.指针和地址 八.结构体 九.接口interface 十.并发神器gor ...

  5. Hystrix的原理与架构

    一.定义 一个开源的延迟与容错框架,用于隔离访问远程服务.第三记库,防止出现级联失败 当某个或某些服务反应慢或者超时严重,主动熔断,当情况好转后,可以自动重连 策略:服务降级.服务限流.服务熔断.服务 ...

  6. Spring Security OAuth2 完全解析 (流程/原理/实战定制) —— Client / ResourceServer 篇

    一.前言 本文假设读者对 Spring Security 本身原理有一定程度的了解,假设对 OAuth2 规范流程.Jwt 有基础了解,以此来对 SpringSecurity 整合 OAuth2 有个 ...

  7. 解惑rJava R与Java的高速通道

    解惑rJava R与Java的高速通道 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  8. 前端3D引擎-Cesium自定义动态材质

    本文代码基于Vue-cli4和使用WebGL的地图引擎Cesium,主要内容为三维场景下不同对象的动态材质构建. 参考了很多文章,链接附在文末. 为不同的几何对象添加动态材质 不知道这一小节的名称概况 ...

  9. CSS基本语法(二)

    目录 CSS基本语法(二) 八.CSS复合选择器 1.后代选择器** 2.子选择器 3.并集选择器** 4.伪类选择器 链接伪类选择器 :focus伪类选择器 总结 九.CSS的元素显示样式 1.概念 ...

  10. golang中结构体指针的应用

    package main import ( "fmt" ) type School struct { brand string city string } type Class s ...