CF1237F

CF1237F

给定一个大小为 \(n\times m\) 的矩形,需要放置部分 \(1\times 2\) 的骨牌,满足不存在两张骨牌占据了同一行或者同一列。

现在已经放了 \(k\) 张骨牌,求在这个矩形上额外放置若干张骨牌的方案数(骨牌无标号)。

\(n,m\le 3600,k\le 2400\)

Solution

维度分离真的是一个好东西。

你会发现我们可以将问题视为一维的情况,然后只需要将两个一维维的情况配对起来就可以了(这样就是二维了)。

所以考虑一维的情况,即给定长度为 \(n/m\) 的序列,部分位置已经放置了元素,你需要放置恰好 \(k\)\(1/2\) 的方案数。

\(f_{i,j}\) 表示当前放置了 \(j\)\(2\) 的方案数,转移枚举当前位置放 2 / 不放 的情况即可,然后剩余的位置全部塞 \(1\) 即可。

最后统计答案的时候枚举 \(1,2\) 在第一个维度上的方案数即可。复杂度为 \(\mathcal O(n^2+m^2)\)

posted @ 2020-09-15 14:11  Soulist  阅读(138)  评论(0编辑  收藏  举报