【luogu P2595】多米诺骨牌(插头DP)(容斥)
多米诺骨牌
题目链接:luogu P2595
题目大意
给你一个 n*m 的矩阵,你可以横竖放 1*2 的木块。
问你有多少种方法,使得每相邻的两行之间必定有横跨的木块,每相邻的两列之间必有横跨的木块。
不是一定要全部放满木块。
思路
首先看到这种题不难想到插头 DP。
但是你发现它那个要求很烦。
那你先不要管他,不难预处理出 为区间 随便放的方案数。
(看似是 ,但我们其实可以在跑的过程中压掉一维,变成 )
然后我们考虑去搞它的要求。
那发现还是不会搞,那我们考虑反过来,求全部的减去有不横跨的。
那不横跨的其实很简单,你把两个 拼在一起,得到的方案数是两个相乘,就可以保证拼接的地方不可能有横跨了。
那不难想到可以枚举分割的状态,但是你两个维度搞在一起还是会超时。
然后你就考虑一个维度直接暴力枚举状态,然后另一个维度用 DP 来搞。
怎么 DP 呢,大概是设 为前 部分分割好了的方案数,然后就 转移。(然后转移的时候注意原来只有一段的情况,然后也容斥一下)
然后这么搞就好了。
我的代码常数大,要卡一卡时间,然后一开始预处理 的插头 DP 其实还可以滚动数组,但我没用。
(我直接开 O2 了)
代码
__EOF__

本文作者:あおいSakura
本文链接:https://www.cnblogs.com/Sakura-TJH/p/luogu_P2595.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Sakura-TJH/p/luogu_P2595.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现