AtCoder Beginner Contest 204 F Hanjo 2
H宽,W长的二维平面上,用1 * 1或者2 * 1的地砖来铺,要求铺满,求出方案数。
数据范围H <= 6, W <= 1e12
看到W的范围就可以想到是一个矩阵快速幂优化的dp转移,问题的关键是如何写出dp的方程以及矩阵的构造。
这里题解的巧妙在于状态的定义,因为不好处理1 * 2的地砖横着摆的情况,因为这会跨两行,我开始以为会有2^12,也就是枚举两行的状态。不过这里状态的定义是当前行的二进制状态压缩,并且要保证前一行是已经塞满的情况。所以在构造状态转移矩阵的时候,也就是从当前的状态 d p [ i ] [ S ] dp[i][S] dp[i][S]转移到状态 d p [ i + 1 ] [ T ] dp[i+1][T] dp[i+1][T]的时候,是要搜索找到当前的状态,也就是S,在加入一些1 * 1和1 * 2的地砖之后变为全1的状态,这时候所对应的T就是 d p [ i + 1 ] [ T ] dp[i + 1][T] dp[i+1][T]。
而转移矩阵 t r a n [ S ] [ T ] tran[S][T] tran[S][T]则是从 d p [ i ] [ S ] dp[i][S]