逼死强迫症

这一道题跟NOIP集训模拟赛1的D题非常像,当然D题的递推方程更复杂(磁盘里面有题解pdf)

对于这一道题,我们设\(f[i][0]\)表示铺了\(i\)列而且全部用的完整的砖的方案数

\(f[i][1]\)表示铺了\(i\)列,但是第\(i\)列缺了一个而且第\(i\)列的唯一的那一块砖头就是1X1其中一个

\(f[i][2]\)表示铺了\(i\)列,但是第\(i\)列缺了一个而且第\(i-1\)列的有一块1X1的砖头

\(f[i][3]\)表示铺了\(i\)列,但是第\(i\)列缺了一个而且第\(i-1\)列和第\(i\)列都没有1X1的砖头

以上三种情况都只用了一块1X1的砖头(如果用了两块,那么铺的面积为偶数,不可能在第\(i\)列缺一个)

\(f[i][4]\)表示铺了\(i\)列而且两块1X1的砖头都用了而且第二块1X1的砖头在第\(i-1\)列上的方案数

\(f[i][4]\)表示铺了\(i\)列而且两块1X1的砖头都用了而且第\(i\)列的面积都是由完整的砖头覆盖的(有两种情况,一种为一个2X1,另一种为两个1X2)

那么有\(f[i][0]=f[i-1][0]+f[i-2][0]\)

\(f[i][1]=f[i-1][0]\)

\(f[i][2]=f[i-2][0]\)

\(f[i][3]=f[i-2][1]+f[i-2][2]+f[i-2][3]\)

\(f[i][4]=f[i][3]\)

\(f[i][5]=f[i-1][5]+2f[i-1][4]+f[i-2][5]+2f[i-2][4]\),这里有个系数2是因为f[i][4]只包含了一种情况(即那块1X1的砖头要么在上面要么在下面,两种情况的总数肯定一样,所以乘以2)

注意矩阵加速的时候我们要化成一维向量,所以给每个f编个号即可,具体见洛谷代码(这点很重要)

以上做法是这种题目的一般的做法,当然状态也可以设置得更多,或者更少(去除冗余的状态);以上状态也是考虑的第\(i\)列不一定铺满只考虑前\(i\)列,另一种考虑方法就是考虑前\(i\)列一定铺满并纳入第\(i+1\)列,一样可以的

然后来看看题解区的做法,比如这一篇

来解释一下为什么当两块1X1的转确定的时候,放的方案是唯一的

比如这张图,此时两个1X1的砖中间相隔偶数个

由于第二个砖是放在最后一列的,所以必须这么放置一个2X1的

同理可以归纳下去,最后必须放成这个样子

如果两个1X1的砖中间相隔奇数列,此时不能放在同一行,要放在不同的两行,然后同理分析就好了

上面这种做法就是因为特殊元素只有两个,我们直接两个一起考虑就好了,不用像之前那样设很多种状态

posted @ 2023-10-03 20:18  最爱丁珰  阅读(6)  评论(0编辑  收藏  举报