蒙德里安的梦想
蒙德里安的猜想
求把$N \times M$的棋盘分割成若干个$1 \times 2$的长方形,有多少种方案。
例如当$N=2$,$M=4$时,共有$5$种方案。当$N=2$,$M=3$时,共有$3$种方案。
输入格式
输入包含多组测试用例。
每组测试用例占一行,包含两个整数$N$和$M$。
当输入用例$N=0$,$M=0$时,表示输入终止,且该用例无需处理。
输出格式
每个测试用例输出一个结果,每个结果占一行。
数据范围
$1\leq N,M\leq 11$
1 | 输入样例: |
解题思路
数据范围为 1 ~ 11 ,考虑进行状压dp
棋盘面积一定是偶数,否则不存在合法方案(本题保证一定合法);
长方形的放置只存在横向和纵向两种方案,现只考虑横向放置长方形。当所有横向长方形防止完毕,纵向方案唯一确定。故只需考虑横向放置即可;
$f[i][j]$表示前$i-1$列已经放置好,且从第$i-1$列延伸出来的$1 \times 1$的小正方形的排列方式为$j$($j$看成$n$位二进制数,第$d$行存在延伸过来的小正方形,则$j$的第$d$位为$1$,否则为$0$)的所有方案数;
状态转移:考虑由$f[i-1][k]$转移。合法的转移情况保证$j$和$k$的同一数位不能都是$1$,否则会发生重叠;并且当第$i$列、第$i-1$列放置完后,不允许存在由连续奇数行没有横向长方形;
对应上述两种情况,保证 i & k == 0
且 i | k 中没有连续奇数个0
。
AC代码
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Guchen's Blog!
评论