《算法竞赛进阶指南》打卡-基本算法-AcWing 96. 奇怪的汉诺塔:递推
文章目录
- 题目解答
- 题目链接
题目解答
来源:acwing
分析:
本题的汉诺塔问题是n个盘子4个塔,最基本的汉诺塔是n个盘子3个塔。本题是要在后者的基础上来做。
设d[i]表示i盘3塔问题的最小移动步数
递推公式是:d[i]=2×d[i−1]+1d[i] = 2 \times d[i -1] + 1d[i]=2×d[i−1]+1
解释:共有A、B、C3个塔,把前i-1个盘子从A塔移动到B塔,然后A塔剩余的最后一个盘子移到C塔,最后把B塔的i-1个盘子移到C盘。
对于本题呢?
设f[i]表示i盘4塔问题的最小移动步数
递推公式是:f[i]=min(f[i],2×f[j]+d[i−j])f[i] = min{(f[i], \ 2 \times f[j] + d[ i - j])}f[i]=min(f[i], 2×f[j]+d[i−j])
解释:共有A、B、C、D4个塔, 初始化f[1] = 1, 表示 1个盘子从A移到D只需要1步。
具体过程:先把j个盘子从A塔移到B塔(这是在4塔问题),然后把 i - j个盘子移到D塔(这是在3塔问题,因为B塔被用了),然后再把B塔上的j个盘子移到D塔(这是在4塔问题)。当然,所有情况取最小值。
ac代码
#include<bits/stdc++.h>
using namespace std;
const int N = 15 ;
int d[N],f[N];
int main(){// 先处理 只有3个塔的情况d[1] = 1; //初始化:1个盘子移到终点for(int i = 2; i <= 12; i ++){d[i] = 2* d[i -1] + 1;}// 处理4个塔的情况memset(f, 0x3f, sizeof f);f[1] = 1; // 1个盘子移到终点// 把j个盘子放到一边// 把剩余的 i -j个盘子放到终点// 再把j个盘子放到终点for(int i = 2; i <= 12; i ++)for(int j = 1; j <= i; j++)f[i] = min( f[i], 2* f[j] + d[i - j]);for(int i = 1; i<= 12; i ++) cout << f[i] << endl;
}
题目链接
https://www.acwing.com/problem/content/98/
参考题解
https://www.acwing.com/solution/content/2473/
《算法竞赛进阶指南》打卡-基本算法-AcWing 96. 奇怪的汉诺塔:递推相关推荐
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩
文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...
- 金字塔(算法竞赛进阶指南)
虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下. 经过多年的研究,科学家对这座金字塔的内部结构已经有所了解. 首先,金字塔由若干房间组成,房间之间连有通道. 如果把房间看作节点, ...
- 《算法竞赛进阶指南》数论篇
<算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...
- 《算法竞赛进阶指南(by 李煜东)》习题题解 集合
又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...
- CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)
算法竞赛进阶指南,278页,完全背包 本题要点: 1.把完全背包的代码改改即可.常规的完全背包: 有n个物品,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值(每 ...
- 中位数--《算法竞赛进阶指南》(货仓选址和七夕祭问题详解)
中位数 今天又和大家见面了啦~ 依旧是 <算法竞赛进阶指南>的学习哦~ 中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本.种群或概 ...
- AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】
AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...
- 算法竞赛进阶指南 骑士放置
4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...
- 算法竞赛进阶指南 萌新入门!
算法竞赛进阶指南 文章目录 算法竞赛进阶指南 前言 一.介绍本书 二.如何阅读本书 三.总结 **笔记思路和结构 ** 算法竞赛进阶指南 这篇文章就简单的写一下吧! 前言 作为一个想要入坑的算法的 ...
最新文章
- 菜鸟程序员之Asp.net MVC Session过期异常的处理
- 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。...
- 【已解决】wepy中使用分包加载报错
- LINUX内核经典面试题
- Object的方法equals,hashCode,toString,clone。另外Comparable接口的方法
- oracle 替换全部空格
- Activiti7使用
- 傅里叶变换及其实现(MATLAB)
- 集腋成裘-15-MongoDB系列-02Find详细
- 程序员到CTO的Java技术路线图
- STM8S003 AWU休眠唤醒 寄存器和库函数2种做法
- 油画的发展过程经历了几个时期?
- MapXtreme 简单了解
- R语言绘制矩阵散点图
- 大疆19年校招0804笔试A卷
- autojs读取文字_Auto.js小白详细代码分析教程-如何阅读本文档 - Documentation
- 基于JSP的网络音乐KTV点歌电台网站
- Blind XSS发现指南
- 程序员是干什么的呢?
- 深入理解C++11电子书pdf下载
热门文章
- solr教程 solr5.5
- PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
- 手持GPS坐标系统的转换与应用
- 【STM32】跑马灯实验主要程序代码分析
- 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第11章-意图场模型干预下的人机共享控制
- 【数理知识】《矩阵论》方保镕老师-第4章-赋范线性空间与矩阵范数
- 1.6 课程资源-深度学习-Stanford吴恩达教授
- 如何将ISE的库和vivado的库都加入modelsim.ini
- 基于linux的ARM设备升级,烧写Nand flash总结
- 03、Swagger2和Springmvc整合详细记录(爬坑记录)