[CQOI2011] 放棋子
前言
偶遇重庆题目, 害怕
上午 + 大半个下午浪费了太多时间, 不过好歹也是搞得比较明白, 下午冲一下进度
思路
听过了捏, 忘了捏, 以后还是听了直接补好一点
转化题意
在 \(n \times m\) 的矩阵中填上颜色, 其中颜色 \(i\) 要填 \(c_i\) 个, 要求同一行和同一列不能有异色块, 求有多少种方案满足要求
先考虑朴素计算, 我们可以令 \(f_{i, j, p}\) 表示使用了 \(i\) 行 \(j\) 列, 已经填完了 \(p\) 种颜色的方案数
考虑转移
考虑 \(\text{用 } c_i \text{ 个颜色占领 } i - l \text{ 行 } j - r \text{ 列的方案数}\) 怎么算
我们考虑 \(g_{i, j, k}\) 表示用 \(k\) 个颜色占领 \(i - l\) 行, \(j - r\) 列的方案数
问题转化为计算 \(g\) 数组
再转化一下
对于一个 \(i \times j\) 的矩阵, 要求每一行每一列至少要填上一个数, 总共填了 \(k\) 个数的方案数
怎么做捏? 好像很典
首先转化成「恰好」类型的问题
对于一个 \(i \times j\) 的矩阵, 恰好有 \(i\) 行填了颜色, 恰好有 \(j\) 列填了颜色, 恰好填了 \(k\) 个数的方案数
考虑用「选择」类问题的方式, 逐渐拆开限制
以下都保证恰好填了 \(k\) 个颜色
首先令 \(f(x, y)\) 表示对于一个 \(x \times y\) 的矩阵, 恰好有 \(x\) 行填了颜色, 恰好有 \(y\) 列填了颜色, 令 \(\varphi(x, y)\) 表示对于一个 \(x \times y\) 的矩阵, 至多有 \(x\) 行填了颜色, 恰好有 \(y\) 列填了颜色 , 令 \(\psi(x, y)\) 表示对于一个 \(x \times y\) 的矩阵, 至多有 \(x\) 行填了颜色, 至多有 \(y\) 列填了颜色
开演
容易发现
更显然的, \(\displaystyle \psi(x, y) = {x \times y \choose k}\)
为了写代码化简一下
结束了
总结
一类转移系数需要使用特殊方法解决的题目
注意使用二项式反演之前至少要转化成「恰好」形式
常见的填色 \(\rm{trick}\)
「选择」类问题的特色:
- 限制等价
- 「恰好」转「至多 / 至少」

浙公网安备 33010602011771号