去刚t3结果把t4写挂了qwq,先把四道题都编个方法出来。
T1
随便写个东西都可以,特判一下偶数然后就瞎搞,预处理什么的反正都可以过
T2
ai只有600,开个桶拿来记录,复杂度反正CCF少爷机能跑过。听说大家都写的是两个堆搞来搞去但是我不会qwq
T3
对于每一个变量记录一个f[i]表示将它取反会不会改变最后的结果。这个过程么用栈模拟中途记录或者打个dfs搜索都可以。这玩意儿本质上是个树形dp。复杂度差不多O(n),无论怎么样反正是个能过的东西
T4
两种方法,记f[i][j][0..2]表示在第i行第j列,是从哪个方向转移过来的。
转移方程:
$f[i][j][0]=max(f[i-1][j][0..2])$
$f[i][j][1]=max(f[i][j-1][0,1])$
$f[i][j][2]=max(f[i][j+1][0,2])$
或者可以注意到上下走其实就是对于每一列,上和下都求一个类似最大连续段和的东西,然后每次取个max就完了。
方程:$f[i][j]=max(f[i-1][j]+a[i],max(up[i],down[i]))$(写了跟没写也没啥区别)