题意:

给你n个盘子,问在四个柱子的情况下,最少需要多少步才能将n个盘子移动到另一个柱子上。

思路:

先来看看最经典的三个柱子问题。

f3[i] = 2*f3[i-1]+1,即将(i-1)个盘子移动到中间那根柱子上,然后再将最后一个盘子移动到目标柱子上,最后将(i-1)个盘子移动到目标柱子上即可。

那么对于四根柱子的话,我们可以先将i个盘子移到B柱子上,然后再将剩下的盘子按照三根柱子的移法移到目标柱子上,然后B柱子上的i个盘子再按四根柱子的移法移动到目标柱子即可。

所以 f4[n] = min(2*f4[i]+f3[n-i])。

总结:

汉诺塔问题是典型的递推问题,此问题也可以拓展到m个柱子,n个盘子上,思路都是统一的进行递推。

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define rep(i,a,b) for(int i = a; i <= b; i++)
using namespace std;int f3[15],f4[15];void init()
{f3[1] = 1;rep(i,2,12)f3[i] = 2*f3[i-1]+1;
}int main()
{int n = 12;init();memset(f4,0x3f,sizeof f4);f4[1] = 1;rep(i,2,n){rep(j,1,i-1){f4[i] = min(f4[i],f4[j]+f3[i-j]+f4[j]);}}rep(i,1,12)printf("%d\n",f4[i]);return 0;
}

【POJ1958】【典型递推问题】汉诺塔问题相关推荐

  1. Strange Towers of Hanoi 汉诺塔问题及其升级(递推)四个汉诺塔问题

    今天学习递推的汉诺塔问题,非常的有趣 文章目录 1.汉诺塔问题来源 分析 2.Strange Towers of Hanoi[DP][递推] 题目大意: 思考 解题步骤: 1.汉诺塔问题来源 汉诺塔( ...

  2. 汉诺塔的java实现及一种思路

    汉诺塔的规则限定导致可以从第n层倒推出n-1层的移动方式,然后一直倒退到n=1时退出.特别适合使用迭代来实现. 按规则在将n-1层移走之前,n层是不能动的,要移动第n层,必须先将其上的n-1层设法移走 ...

  3. 【组合数学】递推方程 ( 递推方程示例 2 汉诺塔 | 递推方程示例 3 插入排序 )

    文章目录 一.递推方程示例 2 汉诺塔 二.递推方程示例 3 插入排序 一.递推方程示例 2 汉诺塔 Hanoi 问题 : 递推方程为 : T(n)=2T(n−1)+1T(n) =2 T(n-1) + ...

  4. hdu 2064汉诺塔III 递推

    汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...

  5. HDU2077 汉诺塔IV【递推+打表】

    汉诺塔IV Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  6. 【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】

    汉诺塔问题 设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步: 把n-1层移到第二个上面去(花费f(n-1)) 把最大的移到第三个柱子上面去(花费1) 把n-1层移动到第三个柱子上去(花费f( ...

  7. 《算法竞赛进阶指南》打卡-基本算法-AcWing 96. 奇怪的汉诺塔:递推

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 本题的汉诺塔问题是n个盘子4个塔,最基本的汉诺塔是n个盘子3个塔.本题是要在后者的基础上来做. 设d[i]表示i盘3塔问题的最小移动 ...

  8. 96. 奇怪的汉诺塔【递推】

    这是一道很经典的问题. 先看3个塔的情况 需要注意的是,这里的汉诺塔移动并无只可以移动到相邻塔的需求.即可以直接从A移到C. 设d[i]表示将i个盘子从这里移到其他除它之外塔的步数 ,总塔的数量为3 ...

  9. 汉诺塔VII(递推,模拟)

    汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  10. HDOJ 汉诺塔系列(递推分析)

    汉诺塔V http://acm.hdu.edu.cn/showproblem.php?pid=1995 设当有N个盘子时,第i个盘子从一个柱子移到另一个柱子需要移动的步数为f[n,p],则有:当N=p ...

最新文章

  1. 存储过程和存储函数初步
  2. 导出的swf文件显示 不出来地图
  3. [USACO17JAN]Promotion Counting 题解
  4. 引发外国网友刷屏的“大国重器”到底什么水平?
  5. 弹性碰撞后速度方向_IPC: SIGGRAPH 2020开源有限元碰撞独家处理方案
  6. MySQL常见问题及解决方案
  7. croppic 图片裁剪
  8. 单片机与嵌入式linux 比较
  9. 四个管理举措提高研发团队工作效率
  10. 视频压缩编码和音频压缩编码的基本原理
  11. java视频会议系统 mcu_视频会议系统必须要用MCU吗
  12. 移动互联网组建与优化
  13. 课程设计 齿轮油泵泵体的机械加工工艺规程及工艺夹具装备设计
  14. 像写Flutter一样开发Android原生应用
  15. Django SVG 名字空间
  16. 读IDEO 设计改变一切的思考
  17. BZOJ4398: 福慧双修【二进制分组+最短路】
  18. 稳了!工业质检蝉联第一
  19. java基础--while循环实现存钱问题案例
  20. UML类关系图记不住?一篇搞定

热门文章

  1. readonly 关键字与 const 关键字不同
  2. 专访ThoughtWorks王磊:从单块架构到微服务架构
  3. iOS通过ASIHTTPRequest提交JSON数据
  4. JavaWeb学习 第7章 Session 会话编程
  5. InstallShield 2011新功能试用(7)- 新增加的InstallShield Prerequisites
  6. mysql text 性能_MySQL - text 性能优化--记录一
  7. java object转泛型_Java 反射:框架设计的灵魂
  8. java nio 追加写文件_java.nio.file读写文件
  9. tensorflow--制作数据集tfrecords文件
  10. 机器人总动员中的小草_机器人总动员观后感(精选4篇)