2019独角兽企业重金招聘Python工程师标准>>>

Strange Towers of Hanoi
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 2513 Accepted: 1667

Description

Background 
Charlie Darkbrown sits in another one of those boring Computer Science lessons: At the moment the teacher just explains the standard Tower of Hanoi problem, which bores Charlie to death! 

The teacher points to the blackboard (Fig. 4) and says: "So here is the problem:

  • There are three towers: A, B and C.
  • There are n disks. The number n is constant while working the puzzle.
  • All disks are different in size.
  • The disks are initially stacked on tower A increasing in size from the top to the bottom.
  • The goal of the puzzle is to transfer all of the disks from tower A to tower C.
  • One disk at a time can be moved from the top of a tower either to an empty tower or to a tower with a larger disk on the top.

So your task is to write a program that calculates the smallest number of disk moves necessary to move all the disks from tower A to C." 
Charlie: "This is incredibly boring—everybody knows that this can be solved using a simple recursion.I deny to code something as simple as this!" 
The teacher sighs: "Well, Charlie, let's think about something for you to do: For you there is a fourth tower D. Calculate the smallest number of disk moves to move all the disks from tower A to tower D using all four towers." 
Charlie looks irritated: "Urgh. . . Well, I don't know an optimal algorithm for four towers. . . " 
Problem 
So the real problem is that problem solving does not belong to the things Charlie is good at. Actually, the only thing Charlie is really good at is "sitting next to someone who can do the job". And now guess what — exactly! It is you who is sitting next to Charlie, and he is already glaring at you. 
Luckily, you know that the following algorithm works for n <= 12: At first k >= 1 disks on tower A are fixed and the remaining n-k disks are moved from tower A to tower B using the algorithm for four towers.Then the remaining k disks from tower A are moved to tower D using the algorithm for three towers. At last the n - k disks from tower B are moved to tower D again using the algorithm for four towers (and thereby not moving any of the k disks already on tower D). Do this for all k 2 ∈{1, .... , n} and find the k with the minimal number of moves. 
So for n = 3 and k = 2 you would first move 1 (3-2) disk from tower A to tower B using the algorithm for four towers (one move). Then you would move the remaining two disks from tower A to tower D using the algorithm for three towers (three moves). And the last step would be to move the disk from tower B to tower D using again the algorithm for four towers (another move). Thus the solution for n = 3 and k = 2 is 5 moves. To be sure that this really is the best solution for n = 3 you need to check the other possible values 1 and 3 for k. (But, by the way, 5 is optimal. . . )

Input

There is no input.

Output

For each n (1 <= n <= 12) print a single line containing the minimum number of moves to solve the problem for four towers and n disks.

Sample Input

No input.

Sample Output

REFER TO OUTPUT.

Source

TUD Programming Contest 2002, Darmstadt, Germany

汉诺塔的解法是一个递归,假设有ABC三个柱子,A柱上有n个盘子。将A上盘子移到C,相当于先把A上n-1个挪到B,再把A上剩余的一个挪到C,现在问题变为了将B上n-1个盘子挪到C。所以有递推公式f(n)=2*f(n-1)+1。
题目中的是加了一根柱子,根据题目的提示,有递推公式g(n)=min{2*g(n-k)+f(k)},即g(n)=min{2*g(n-k)+2^k-1}。可以用dp来做。

#include <cstdio>
#include <cstdlib>
#define MAXN 15
#define INF 100000000int main()
{int dp[MAXN] = {0};dp[1] = 1;dp[0] = 0;for (int i = 2; i <= 12; ++i){int my_min = INF;for (int j = 1; j <= i; ++j){int tmp = (dp[i - j] << 1) + (1 << j) - 1;if (my_min > tmp){my_min = tmp;}}dp[i] = my_min;}for (int i = 1; i <= 12; ++i){printf("%d\n", dp[i]);}return 0;
}

转载于:https://my.oschina.net/locusxt/blog/350260

poj 1958 Strange Towers of Hanoi相关推荐

  1. POJ - 1958 Strange Towers of Hanoi(线性dp)

    题目链接:点击查看 题目大意:继承经典的n个盘子三座塔的汉诺塔问题,现在问对于n个盘子四座塔的升级版汉诺塔问题,对于n=1~12的答案分别是多少 题目分析:首先分析三座塔的情况,对于第n个盘子而言,我 ...

  2. Strange Towers of Hanoi (POJ1958)

    Strange Towers of Hanoi (POJ1958) n个盘子4座塔的Hanoi问题至少需要多少步?(1<=n<=12) 分析: n盘3塔: \(d[n] = 2*d[n-1 ...

  3. POJ1958 Strange Towers of Hanoi [递推]

    题目传送门 Strange Towers of Hanoi Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3117   Ac ...

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

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

  5. poj1958 Strange Towers of Hanoi 题解报告

    题目传送门 [题目大意] 有四个汗诺塔,$n$个盘子,求最小移动步数. [思路分析] 对于三个汗诺塔的情况,设$f[i]$表示移动$i$个盘子所需的最小步数,当已经有$i-1$个盘子移动到位时,需要把 ...

  6. UVA254 Towers of Hanoi【DFS】

    In 1883, Edouard Lucas invented, or perhaps reinvented, one of the most popular puzzles of all times ...

  7. WeChall Towers of Hanoi (Java, Crac... 答案

    还没开始学Java,先贴下别人的答案,省得以后找不到. Towers of Hanoi - 我怎么能不努力奋斗 - 博客园

  8. POJ1958-Strange Towers of Hanoi【递推】

    正题 题目链接:http://poj.org/problem?id=1958 大意 有4根柱子的汉诺塔,有n个盘,求移动次数 解题思路 首先我们定义只有三根柱子时有n个盘的话移动次数是dndnd_n, ...

  9. poj 2891 Strange Way to Express Integers 2012-09-05

    http://poj.org/problem?id=2891 解线性模方程组. 比较坑爹,数据比较大,很容易溢出. 1 Program poj2891; 2 3 var m:int64; 4 5 a, ...

最新文章

  1. 奋斗--陆涛在高强追悼会上说
  2. Python中使用ElementTree解析xml
  3. boost::type_erasure模块convert相关的测试程序
  4. linux 用户管理以及其他命令
  5. 阿狸心形表白html,2013qq情侣分组心形一对 心心相印的地久天长
  6. 独生子女证每月增加3%的退休金,但丢了怎么办?
  7. 雷军:程序员如何成功创业?
  8. R语言常用的绘图参数
  9. Couldn't find leader offsets for Set news_topic
  10. 分析计算机网络的功能,分析计算机网络管理系统的功能及实现
  11. 对于青少年编程等级考试的认识
  12. asciinema终端录屏神器使用及过坑
  13. 树莓派安装Ubuntu系统详细过程
  14. Oracle数据库精讲与疑难解析(第2版)
  15. java 生成一个随机整数,范围从 1 到 10;或 生成一个 0 或 1 的随机整数
  16. 刘强东章泽天合体破离婚传闻,网友:有钱人终成眷属
  17. 「镁客早报」世界产权组织称:2018年国际专利申请华为排名第一;微软股价大涨,市值超9000亿美元...
  18. 泛微OA单点登录帆软报表
  19. 同态加密在机器学习中的应用
  20. 机器人运动学轨迹规划(三)----S型曲线规划算法

热门文章

  1. 2021年速卖通828年中大促活动报名攻略
  2. 中国药妆行业投资现状与发展策略分析报告2022-2028年
  3. 中国针状焦行业运营模式与投资风险评估报告2022-2028年
  4. com接口传入、传出字符串的说明和例程
  5. Dotfuscator 4.9 破解版下载地址
  6. 解读.net垃圾回收和CLR 4.0对垃圾回收所做的改进之一-.Net编程教程
  7. python地图 两点距离_使用Python调用百度地图Api获取两地距离
  8. 谋定数字农业生态系统 万亿市场对话中国农民丰收节交易会
  9. 谋定政策经信研究扶持-万祥军:对话李玉庭跨界电商重整
  10. MySql中delimiter