逼死强迫症

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

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

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

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

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

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

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

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

那么有f[i][0]=f[i1][0]+f[i2][0]

f[i][1]=f[i1][0]

f[i][2]=f[i2][0]

f[i][3]=f[i2][1]+f[i2][2]+f[i2][3]

f[i][4]=f[i][3]

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

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

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

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

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

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

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

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

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

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

posted @   最爱丁珰  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2021-10-03 洛谷P4852
点击右上角即可分享
微信分享提示