文章目录

  • 题目解答
  • 题目链接

题目解答



来源: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. 奇怪的汉诺塔:递推相关推荐

  1. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

  2. 金字塔(算法竞赛进阶指南)

    虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下. 经过多年的研究,科学家对这座金字塔的内部结构已经有所了解. 首先,金字塔由若干房间组成,房间之间连有通道. 如果把房间看作节点, ...

  3. 《算法竞赛进阶指南》数论篇

    <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...

  4. 《算法竞赛进阶指南(by 李煜东)》习题题解 集合

    又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...

  5. CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)

    算法竞赛进阶指南,278页,完全背包 本题要点: 1.把完全背包的代码改改即可.常规的完全背包: 有n个物品,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值(每 ...

  6. 中位数--《算法竞赛进阶指南》(货仓选址和七夕祭问题详解)

    中位数 今天又和大家见面了啦~ 依旧是 <算法竞赛进阶指南>的学习哦~ 中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本.种群或概 ...

  7. AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】

    AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...

  8. 算法竞赛进阶指南 骑士放置

    4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...

  9. 算法竞赛进阶指南 萌新入门!

    算法竞赛进阶指南 文章目录 算法竞赛进阶指南 前言 一.介绍本书 二.如何阅读本书 三.总结 **笔记思路和结构 ** 算法竞赛进阶指南 这篇文章就简单的写一下吧! 前言 ​ 作为一个想要入坑的算法的 ...

最新文章

  1. 菜鸟程序员之Asp.net MVC Session过期异常的处理
  2. 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。...
  3. 【已解决】wepy中使用分包加载报错
  4. LINUX内核经典面试题
  5. Object的方法equals,hashCode,toString,clone。另外Comparable接口的方法
  6. oracle 替换全部空格
  7. Activiti7使用
  8. 傅里叶变换及其实现(MATLAB)
  9. 集腋成裘-15-MongoDB系列-02Find详细
  10. 程序员到CTO的Java技术路线图
  11. STM8S003 AWU休眠唤醒 寄存器和库函数2种做法
  12. 油画的发展过程经历了几个时期?
  13. MapXtreme 简单了解
  14. R语言绘制矩阵散点图
  15. 大疆19年校招0804笔试A卷
  16. autojs读取文字_Auto.js小白详细代码分析教程-如何阅读本文档 - Documentation
  17. 基于JSP的网络音乐KTV点歌电台网站
  18. Blind XSS发现指南
  19. 程序员是干什么的呢?
  20. 深入理解C++11电子书pdf下载

热门文章

  1. solr教程 solr5.5
  2. PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
  3. 手持GPS坐标系统的转换与应用
  4. 【STM32】跑马灯实验主要程序代码分析
  5. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第11章-意图场模型干预下的人机共享控制
  6. 【数理知识】《矩阵论》方保镕老师-第4章-赋范线性空间与矩阵范数
  7. 1.6 课程资源-深度学习-Stanford吴恩达教授
  8. 如何将ISE的库和vivado的库都加入modelsim.ini
  9. 基于linux的ARM设备升级,烧写Nand flash总结
  10. 03、Swagger2和Springmvc整合详细记录(爬坑记录)