骨牌覆盖问题:
用1*2骨牌完美覆盖n*m棋盘,求方案数
一、2*m
如果骨牌横着放,只能两个横着的骨牌摞在一起
如果竖着放,恰好占一列
所以dp[i]=dp[i-1]+dp[i-2]
即斐波那契数列
二、3*m
可以想到一个递推式:f[n]=a2*f[n-2]+a4*f[n-4]+a6*f[n-6]+……+an*f[0]
ai(i是偶数)是未知的系数
即覆盖3*i棋盘且无法按某一列将3*i棋盘分成左右两部分的方案数
当i=2时,有3种方案
当i>=4(i为偶数)时,只有2种
因为考虑最左上角的骨牌,如果竖着放,要想无法被分割,除了最右上角的竖着放,其余都要横着放
如果最左上角的骨牌横着放,与他竖着放是对称的
所以f[n]=3*f[n-2]+2*f[n-4]+2*f[n-6]+……+2*f[0]
同理得f[n-2]=3*f[n-4]+2*f[n-6]+……+2*f[0]
两式相减,得f[n]=4*f[n-2]-f[n-4]
三、n*m
https://www.cnblogs.com/TheRoadToTheGold/p/12202781.html
原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/12203111.html
时间: 2024-10-10 06:28:52