我会告诉你们这题有公式吗?
最上面的为第1行,最下面为第n行,从上到下按行DP
0表示没有被覆盖,1表示被覆盖了
状态:dp[i][s],i为当前行,s为状态,dp[i][s]表示方案数
转移:dp[i][s]=∑(dp[i-1][ss]),要求状态s与状态ss合法
目标状态:dp[n][maxs],maxs表示全部是1的串,即全部覆盖满了
约定放置方法,竖放只能从下面往上填空
则在第i行的第j列竖放一个方块的话,第i-1行第j列为0
前i-2行已经放满了,第i-1行的状态为ss(dp[i-1][ss])
在第i行放,放的方法不定,但是放完后第i-1行必须为maxs,且第i行的状态变为了s,所以转移是唯一的
第1行的初始化暴力枚举,因为约定了放法,所以第1行是不能竖放,只能横放
在判断第1行状态的时候,连着的1的个数必定为偶数,如果出现了单独的1,说明不合法
最后讨论s和ss在什么情况下合法:
一 第i行的第j列为1时,第i-1行的第j列为1,第i行第j+1列为1,第i-1行第j+1列为1,横放,之后向左移动两格
二 第i行第j列为1时,第i-1行第j列为0,竖放,之后向左移动一格
三 第i行第j列为0时,第i-1行第j列为1,否则不合法
最后记得开long long
如果公式的话:
∏n/2