U562068 - 经典多米诺
解析
首先我们需要对多米诺问题2专门进行研究得到一些性质



所以对于答案本身,如果不存在障碍物,那么总方案的数值就一定是一个斐波那契数。
假设如果存在障碍会有什么情况,首先障碍一定是偶数个,不然放置奇数个的话,整体的方案是一定为0的,和题意不符。
下图有两种障碍的放置方法
如果是横向放着,我们会发现,障碍的底下只能用红色横线的方法,答案固定,现在整体方案变成了左侧的方案数 乘以 右侧的方案数量。

或者是竖着放置,整体方案也是变成了左侧的方案数 乘以 右侧的方案数量。

长度 \(n\) 要求最小,所以一定是竖着放置障碍,另外多列障碍和一列障碍,对方案数影响是一样的。

所以题意转换为
m是方案数,等于多个斐波那契数相乘,比如现在得到的是dp[A] 乘以 dp[B] 乘以 dp[C], 最小长度就是 A + 1 + B + 1 + C, 其中1代表竖着的一列障碍, 如下图

所以考虑用搜索将一个 \(m\) 变成多个斐波那契数相乘,找到最优解。
这里需要注意的一点是,第 \(88\) 个斐波那契数已经大于 \(1e18\) ,所以枚举范围限定在 \(1 \sim 87\) 之间, \(1\) 答案需要特殊判断。
这里可以利用最优性剪枝,和有效性剪枝,每次枚举的斐波那契数大于等于之前的,并且不能大于已有的答案。
这里提供搜索剪枝和记忆化搜索两种写法。
记忆化搜索参照:
.png)
搜索剪枝参照:
.png)
U562068 - 经典多米诺的更多相关文章
- 【Tsinghua OJ】多米诺骨牌(domino)问题
(domino.c/cpp)[问题描述] 小牛牛对多米诺骨牌有很大兴趣,然而她的骨牌比较特别,只有黑色和白色的两种.她觉 得如果存在连续三个骨牌是同一种颜色,那么这个骨牌排列便是不美观的.现在她有n个 ...
- 多米诺(codevs 3052)
题目描述 Description 一个矩形可以划分成M*N个小正方形,其中有一些小正方形不能使用.一个多米诺骨牌占用两个相邻的小正方形.试问整个区域内最多可以不重叠地放多少个多米诺骨牌且不占用任何一个 ...
- [CareerCup] 6.2 Dominos on Chess Board 棋盘上的多米诺
6.2 There is an 8x8 chess board in which two diagonally opposite corners have been cut off. You are ...
- 省选训练赛第4场D题(多米诺骨牌)
题目来自FZU2163 多米诺骨牌 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description Vasya很喜欢排多米诺 ...
- wikioi3052 多米诺
题目描述 Description 一个矩形可以划分成M*N个小正方形,其中有一些小正方形不能使用.一个多米诺骨牌占用两个相邻的小正方形.试问整个区域内最多可以不重叠地放多少个多米诺骨牌且不占用任何一个 ...
- 【01背包】洛谷P1282多米诺骨牌
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- 多米诺骨牌放置问题(状压DP)
例题: 最近小A遇到了一个很有趣的问题: 现在有一个\(n\times m\)规格的桌面,我们希望用\(1 \times 2\)规格的多米诺骨牌将其覆盖. 例如,对于一个\(10 \times 11\ ...
- P1282 多米诺骨牌 (背包变形问题)
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- [LeetCode] Push Dominoes 推多米诺骨牌
There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...
- [Swift]LeetCode790. 多米诺和托米诺平铺 | Domino and Tromino Tiling
We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...
随机推荐
- Win32汇编学习笔记01.环境配置
Win32汇编学习笔记01.环境配置-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 环境配置 masm32下载 官网:http://www.masm32.com/ ...
- 3 MyBatis动态SQL之set标签|转
1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...
- Java虚拟机之垃圾回收器
上面有7类垃圾回收器,分为两块,上面为新生代(Young generation)回收器,下面是老年代(Tenured generation)回收器.如果两个回收器之间存在连线,就说明它们可以搭配使 ...
- python获取地理位置
废话不多说,直接上代码 1 from urllib.request import urlopen 2 my_ip = urlopen('http://ip.42.pl/raw').read() 3 4 ...
- [读书笔记]《大数据之路》——阿里数据整合及管理体系——OneData模型
阿里数据整合及管理体系--OneData模型 摘要 阿里的<大数据之路>第9章介绍了其内部进行数据整合及管理的方法体系和工具OneData.他们在这一体系下,构建统 .规范.可共的全域数据 ...
- Springboot笔记<13>单元测试
单元测试 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,使用@SpringBootTest注解会以springboot的环境启动 JUnit5常用注解 @Tes ...
- 【语义分割专栏】3:Segnet实战篇(附上完整可运行的代码pytorch)
目录 前言 Segnet全流程代码 模型搭建(model) 数据处理(dataloader) 评价指标(metric) 训练流程(train) 模型测试(test) 效果图 结语 前言 Segnet原 ...
- 如何从Docker image提取 Dockerfile
参考链接:https://github.com/cucker0/dockerimage2df 参考链接:https://github.com/cucker0/docker/blob/main/md/由 ...
- 记录一次OPENCV安装的排坑之路
1.首先从opencv官网上下载 2.下载之后可以得到opencv的源代码文件,解压后是这个样子 3.下载cmake 选择Installer安装,安装完了就会看见这个玩意 4.下载opencv con ...
- 大数据计算引擎 EasyMR 如何简单高效管理 Yarn 资源队列
设想一下,作为一个开发人员,你现在所在的公司有一套线上的 Hadoop 集群.A部门经常做一些定时的 BI 报表,B部门则经常使用软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底 ...