【DP】17.2.7 T3 多米诺骨牌 题解

这里写图片描述
我会告诉你们这题有公式吗?

最上面的为第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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值