CSP 模拟1

考场上一开始没意识到每次乘完要取模,直接想出来个 \(\dfrac{(\sum a_i)^m}{n^m}\) 的答案,然后仔细读了题,写了个矩阵快速递推就不想了(矩阵乘还写挂了)

发现每次是独立的,而且是与模数相关,可以类似快速幂的思路倍增处理,算出 \(2^i\) 时的答案,如果 \(2^i\)\(m\) 的二进制表示中,则统计进总的答案,大概把快速幂中的乘换成更新操作就好了

考场上是正确思路,考虑相邻两个节点之差,但不清楚为什么思路没有引向正解

\(a\)\(b\) 是显然的,直接换根 dp 两次 dfs 即可

\(a\)\(b\) 的思路能导向由 \(b\)\(a\)

考虑换根 dp 中从父亲 \(f\) 转移到儿子 \(x\) 的差值为 \((sum-siz_x)-siz_x\),其中 \(siz_x\) 为以 \(x\) 为根的子树中 \(a_i\) 的和,\(sum\) 为所有 \(a_i\) 的和,假设以 1 为根,那么 \(b_1=\sum_{i=2}^n siz_i\),与前边式子联立可解得 \(sum\),进而就可解得 \(siz_i\),然后解的 \(a_i\)

简单组合题,最后十多分钟才开始做,越做越急:

最后只做了 3 个任务

  1. 因为最后回到原点,所以左右和上下的数量相等,计算 \(\sum_{i=0}^{\frac n2}\binom{n}{i,i,\frac n2-i,\frac n2-i}\) 即可
  2. 卡特兰数定义,咋算都行
  3. 直接 \(O(n^2)\) dp 即可
  4. 把左下和右下看成 \(1\)\(-1\),发现左右和上下都满足卡特兰数的定义,再把左右和上下随便排列即可,式子为 \(\sum_{i=0}^{n/2}C_{i}C_{\frac n2-i}\binom{n}{n-2i}\)

DP搬运工 1

定义 dp 数组 \(f_{i,j,k}\) 的意义如下:

选到 \(i\) 时有 \(j+1\) 个连续段(或有 \(j\) 个空位)并且相邻最大值之和为 \(k\) 的方案数

答案显然就是 \(\sum_{i\le k}f_{n,0,i}\)

考虑如何转移第 \(i\) 个数:

  • 直接接在最后一个连续段后面(或第一个前面),对 \(j\) 无影响,对 \(k\) 产生 \(i\) 的贡献
  • 在最后一个连续段后边加一个空位,然后接在这个空位后面(或在第一个连续段前面加一个空位,然后接在前面),相当于多了一个连续段,对 \(j\) 产生 \(1\) 的贡献,对 \(k\) 无影响

如果有空位:

  • 替换空位,对 \(j\) 产生 \(-1\) 的贡献,对 \(k\) 产生 \(2i\) 的贡献,有 \(j\) 种选择
  • 接在空位边上,对 \(j\) 无影响,对 \(k\) 产生 \(i\) 的贡献,有 \(2j\) 种选择
  • 将空位拆成两个然后把 \(i\) 放在中间,对 \(j\) 产生 \(1\) 的贡献,对 \(k\) 无影响,有 \(j\) 种选择
posted @ 2023-07-20 16:33  Rolling_star  阅读(76)  评论(4编辑  收藏  举报