思路是借鉴网上一大牛的,写的很完美了,所以一句没改,代码是自己敲的,C语言版
变体汉诺塔
问题描述:在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(即现在有四根柱子a,b,c,d),计算将n个盘从第一根柱子(a)全部移到最后一根柱子(d)上所需的最少步数,当然,也不能够出现大的盘子放在小的盘子上面。注:1<=n<=64;
分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]=1;当n=2时,F[n]=3;如同经典汉诺塔一样,我们将移完盘子的任务分为三步:
(1)将x(1<=x<=n)个盘从a柱依靠b,d柱移到c柱,这个过程需要的步数为F[x];
(2)将a柱上剩下的n-x个盘依靠b柱移到d柱(注:此时不能够依靠c柱,因为c柱上的所有盘都比a柱上的盘小)
些时移动方式相当于是一个经典汉诺塔,即这个过程需要的步数为2^(n-x)-1(证明见再议汉诺塔一);
(3)将c柱上的x个盘依靠a,b柱移到d柱上,这个过程需要的步数为F[x];
第(3)步结束后任务完成。
故完成任务所需要的总的步数F[n]=F[x]+2^(n-x)-1+F[x]=2*F[x]+2^(n-x)-1;但这还没有达到要求,题目中要求的是求最少的步数,易知上式,随着x的不同取值,对于同一个n,也会得出不同的F[n]。即实际该问题的答案应该min{2*F[x]+2^(n-x)-1},其中1<=x<=n;在用高级语言实现该算法的过程中,我们可以用循环的方式,遍历x的各个取值,并用一个标记变量min记录x的各个取值中F[n]的最小值。
数值不是很大,int完全可以搞定,代码如下
#include<stdio.h>
#include<math.h>
#define M 99999999
void main()
{int i,n,x,min,f[65];f[1]=1;f[2]=3;for(i=3;i<=65;i++){min=M;for(x=1;x<i;x++)if(2*f[x]+pow(2,i-x)-1<min)min=2*f[x]+(int)pow(2,i-x)-1;f[i]=min;}while(~scanf("%d",&n))printf("%d/n",f[n]);
}

hdu 1207 汉诺塔II (四柱汉诺塔)相关推荐

  1. [HDU 1207] 汉诺塔II (四柱汉诺塔)

    描述 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆 ...

  2. 三柱汉诺塔四柱汉诺塔

    汉诺塔问题_哔哩哔哩_bilibili 三柱汉诺塔,从整体来看,分为三部 1.先让n-1个盘先由a柱放在b柱 2.把第n个盘由a柱放在c柱 3.将这n-1个盘由b柱移动到c柱 而其中的递归过程就是直到 ...

  3. 四柱汉诺塔 -- 动态规划求解最优移动次数

    自己用Java写了一个前台进行四柱汉诺塔的移动演示,是按照最优次序进行移动的,链接里有详细的代码实现:https://download.csdn.net/download/qq_40285036/10 ...

  4. 多柱汉诺塔最优算法设计探究

    多柱汉诺塔最优算法设计探究   引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因此多柱汉诺塔的柱子个数M ...

  5. 四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼

    我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子. 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸.先来看看经典的三柱汉诺塔. 一.三柱汉诺塔(Hanoi_Thr ...

  6. 多柱汉诺塔的Frame-Stewart算法

    通过分析三柱汉诺塔的递归求解过程,我们能够线性递推出移动nnn个盘子的最小移动次数 设三柱汉诺塔,移动nnn个盘子的最小移动次数为T(3,n)T(3, n)T(3,n) T(3,n)={1n=12f( ...

  7. 汉诺塔II|汉诺塔4柱

    汉诺塔II|汉诺塔4柱 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根 ...

  8. 汉诺塔问题(含四柱加强版)

    参考:四柱加强版汉诺塔HanoiTower 1. 经典汉诺塔 思路分析:首先分析三根柱子的汉诺塔:将第i-1个盘子从a柱通过三根柱子移动到b柱,然后将最大的移动到c柱,最后又将i−1个盘子通过三根柱子 ...

  9. 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII

    汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...

最新文章

  1. Spring Boot 2.3.0 新特性:优雅停机!
  2. 小心Redis漏洞让你服务器沦为肉鸡
  3. wpf prism IRegionManager 和IRegionViewRegistry
  4. 设计模式-拦截器模式
  5. 《时间简史》(评论一)(转载)
  6. python3.7 pip安装_python3.7安装, 解决pip is configured with locations that require TLS/SSL问题...
  7. 骚操作!Intellij IDEA居然藏着这些实用小技巧 !
  8. 圆环划痕检测halcon
  9. Python第一天学习---基础语法
  10. 什么叫小米粒吸尘机器人_2020年,吸尘器推荐选购,家用吸尘器什么牌子好?扫地机器人推荐,吸尘器选购避坑指南!...
  11. java hiveconf_Java学习路线分享hive的运行方式
  12. oracle 01157,Oracle数据库启动时出现ORA-01157和ORA-01110问题
  13. PhoneGap跨平台移动应用开发框架体验
  14. 【linux】nmap命令使用
  15. cnpack导致view快捷键失灵。
  16. App自动绑定的五大应用场景
  17. 嵌入式Linux设置开机自动运行程序(基于BusyBox init)
  18. debian安装mediawiki教程
  19. 永中Office已失去往日的光辉
  20. 基于 javaagent + javassist 一步步实现调用链系统 (2)

热门文章

  1. Oracle 大数据量查询优化
  2. 华为否认Mate40升级鸿蒙传闻,华为鸿蒙系统什么时候上市?华为否认Mate40升级鸿蒙传闻...
  3. Linux 下重新挂载分区方法
  4. 5G+工业互联网应用场景大集锦!
  5. ECharts 示例——双Y轴
  6. HTML期末学生大作业-节日网页作业html+css+javascript
  7. PLC内部等效电路怎么设计?
  8. 服装店铺装修有哪些窍门?做好这3点,顾客主动上门
  9. 飞塔60d带宽_飞塔防火墙划分带宽 万兆防火墙
  10. 如何远程管理天翼云RDS数据库