【cofun1370】走道铺砖问题
Description
有一个专门为装修设计方案的设计师。在某一天,他接到了一个项目,为一栋正在修建的大楼设计走道的地板铺设方案。此项目的委托人事先便进行了说明:地板砖只有1×2一种规格,而整栋楼中同类走道又有许多个,他不想其中有任何的两个出现重复的设计方案。因此,设计师必须确定其可行性,即对于一个N×M(N×M为偶数)的走道,用N×M/2块1×2的地板砖将其铺满,可以有多少种不同的设计方案,如果方案总数少于此类走道的个数,则该项目边不可能实现。
现在,他需要这样一个程序:对于输入的走道规格N、M,计算出可以设计出的不同方案总数(不要求本质不同)。
Input Format
输入文件仅一行,有两个数N、M,表示走道的规格。
Output Format
输出文件也只有一行,即得出的方案总数。
Sample Input
3 4
Sample Output
11
Hint
由于是走道,所以N和M中将会有一个较小。其中min{N,M}≤12,1≤N、M≤40,且N×M为偶数。
- 分析 :
- min{N, M} <= 12, 因此考虑状压DP。
这题不是棋盘问题了,而是覆盖问题。
但我们可以用类似的思想考虑:
①由于搬砖1 * 2,当前行仅与上一行相关联。
②dfs出每行的覆盖情况,把当前行和上一行压成二进制分别存在数组t,g中。(0:未覆盖/ 1:已覆盖)
③枚举每行进行状压DP,转移方程:
- min{N, M} <= 12, 因此考虑状压DP。
f[i][t[j]] = f[i][t[j]] + f[i - 1][g[j]];
f[i][t[j]]:到了第i行,当前行状态为t[j]。
注意:由于数据大,需要运用高精度。
【这题的dfs转移本po理