NOIP训练赛16

时间安排

7:40~9:30 写完 T1,T2 暴力加调试,T1想了半天做法,赛后发现想假了

8:40~9:30 写完T3暴力加调试

9:30~10:40 看了一眼T4,感觉不可做,罚坐

10:40~11:40 忽然感觉T4贪心可做(事实证明做法假了),最后没来得及调过大样例,最后的时间都用来推T3的公式

总结

最近暴力写的太慢了,而且思路有时候不清楚,容易想出假做法

题解

T1

诈骗题

从后向前扫一遍做后缀和,一旦后缀和大于 \(0\) 答案就加 \(1\),然后后缀和清零,否则继续向前扫

T2

\(dp_{l,r}\) 表示区间 \(l\sim r\) 中所有答案的和

考虑加法

考虑 \(dp_{l,r}\) 如何从 \(dp_{l,k}\)\(dp_{k+1,r}\) 转移过来

\(g_{l,r}\) 表示 \(l\sim r\) 中有几种可能得答案,那么就可以得到转移方程:

\(dp_{l,r}=\sum_{k-l}^{r-1}(dp_{l,k}\times g_{k+1,r}+dp_{k+1,r}\times g_{l,k})\times C_{r-l-1}^{k-1}\)

组合 \(C\) 的意思是从 \(r-l-1\) 次合并操作中选择 \(k-l\) 次操作来合并左区间

同理得出减法的转移方程:

\(dp_{l,r}=\sum_{k-l}^{r-1}(dp_{l,k}\times g_{k+1,r}-dp_{k+1,r}\times g_{l,k})\times C_{r-l-1}^{k-1}\)

那么由于乘法满足分配率,所以将答案直接撑起来就行:

\(dp_{l,r}=\sum_{k-l}^{r-1}dp_{l,k}\times dp[_k+1,r] \times C_{r-l-1}^{k-l}\)

\(g\) 数组的转移如同上面的 \(dp\) 数一样,考虑两个区间互相插入的情况:

\(g_{l,r}=\sum_{k-l}^{r-1}g_{l,k} \times g_{k+1,r}\times C_{r-l-1}^{k-l}\)

初始状态:\(dp_{i,i}=num_i,g_{i,i}=1\) 答案即是 \(dp_{1,n}\)

原题解

T3

打表题

结论:满足条件的解要么每一列黑白交替,要么每一行黑白交替

考虑将横纵坐标之和为偶数的颜色反转,则总方案数即是所有列都同色的方案加上所有行都同色的方案减去列和行都同色的方案

T4

考虑 \(DP\)

\(dp_{i,0/1}\) 表示当前考虑到以 \(i\) 为根的子树中,选择/不选择与其子树在同一联通块中,则可得出状态转移方程:(设 \(x\) 的子节点为 \(v\) ,注意贡献是联通块结束时才计算贡献)

\(dp_{x,0}=\min(dp_{v,0},dp_{v,1}+k),dp_{x,1}=\min(dp_{v,0},dp_{v,1})\)

接下来考虑联通块的贡献

\(cnt_{i,0/1}\) 表示当前 \(dp_{i,0/1}\) 在最有贡献时有多少个联通块,则只需要在联通块结束的时候特判加一即可

考虑在满足最优解的前提下,联通块的个数是单调不增的(\(dis_{x,y}\ge k\) )

则当 \(l\) 的联通块个数等于 \(r\) 的联通块的数时, \((l,r)\) 中 的答案都能求出来,分治求解即可

最后可以用 \(dfn\) 优化\(dp\) (常数级优化,改变枚举顺序)

posted @ 2023-10-07 11:20  dubnium  阅读(23)  评论(0)    收藏  举报