题目地址

经典递推题。

解出 n (1<=n<=12) 个盘子 \(4\) 座塔的Hanoi(汉诺塔)问题最少需多少步?(1到12每个答案分别占一行)

题解

在原Hanoi问题中 \(d[i]\) 表示 3座塔下 \(i\) 个盘子的最小步数。如果你还没有忘记的话:

\[d[i]=d[i-1]*2+1
\]

这个式子还是很显然的。

我们设 \(f[i]\) 表示 4座塔下 \(i\) 个盘子的最小步数。 那么有:

\[f[i]=\text{min}\{f[j]*2+d[i-j]\}(1<=j<=i)
\]

那我们来仔细康康这个式子,\(f[j]\) 指将 \(j\) 个盘子放在 \(B\) 塔上,剩下的盘子采用 3座塔全部放在 \(D\) 塔上,再把 \(B\) 塔上的 \(j\) 个盘子放在 \(D\) 塔上。

Code

#include<bits/stdc++.h>
#define N 15
using namespace std;
int n;
int f[N],d[N];
int main()
{
memset(f,0x3f,sizeof(f));
d[1] = f[1] = 1; puts("1");
for(int i=2;i<=12;++i) {
d[i] = d[i-1]*2 + 1;
for(int j=1;j<=i;++j) {
f[i] = min(f[i],f[j]*2+d[i-j]);
}
printf("%d\n",f[i]);
}
return 0;
}

理解了之后,我们可以来思考一下 \(n\) 个盘子 \(m\) 座塔的做法。

我们设 \(f[i][j]\) 为 \(i\) 座塔 ,\(j\) 个盘子的最少步数,那么有:

\[f[i][j]=\text{min}\{f[i][k]*2+f[i-1][j-k]\}
\]

其实原理是一样的。

睡个好觉吧,晚安!

[题目] 4座塔的Hanoi的更多相关文章

  1. [js - 算法可视化] 汉诺塔(Hanoi)演示程序

    前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...

  2. 汉诺塔(hanoi)

    汉诺塔代码: def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) print(x,'-->',z) ...

  3. JavaScript算法实现之汉诺塔(Hanoi)

    目前前端新手,看到的不喜勿喷,还望大神指教. 随着Node.js,Angular.js,JQuery的流行,点燃了我学习JavaScript的热情!以后打算每天早上跟晚上抽2小时左右时间将经典的算法都 ...

  4. 题目---汉诺塔及AI代码及八皇后

    2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...

  5. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  6. 算法竞赛进阶指南 0x00 基本算法

    放在原来这个地方不太方便,影响阅读体验.为了读者能更好的刷题,另起一篇随笔. 0x00 基本算法 0x01 位运算 [题目][64位整数乘法] 知识点:快速幂思想的灵活运用 [题目][最短Hamilt ...

  7. POJ 1958 Strange Towers of Hanoi

    Strange Towers of Hanoi Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3784 Accepted: 23 ...

  8. [POJ1958][Strange Tower of Hanoi]

    题目描述 求解 \(n\) 个盘子 \(4\) 座塔的 Hanoi 问题最少需要多少步 问题分析 考虑 \(3\) 座塔的 Hanoi 问题,记 \(f[i]\) 表示最少需要多少步, 则 \(f[i ...

  9. POJ1958 Strange Towers of Hanoi [递推]

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

随机推荐

  1. es的调优

    3.1.分片查询方式 当前的图片中有5个主分片,5个副本:这对于es的集群来说,这种配置是非常常见的: 但是问题来了,当我们的客户端做查询的时候,程序会向主分片发送请求还是副本发送请求? 还是说直接去 ...

  2. git本地文件提交

    一.github在线上传文件夹 1.点击上传文件 2 .直接拖拽 直接拖拽即可上传文件夹及文件夹里面的文件.如果点击 choose your files 就只能上传单个文件. 二.通过git工具上传本 ...

  3. 电脑配置Java环境变量之后,在cmd中仍然无法识别

    在电脑上配置了Java的环境变量,但是在cmd框中仍然无法识别: 解决方法:cmd.exe右键---以管理员身份运行,即可识别

  4. IIS知识点总结

    一.命令行启动IIS Express 转自:https://www.cnblogs.com/cby-love/p/7102847.html 我们在调试WEB程序的时候可以把本地web程序挂载到本地II ...

  5. PHP密码和token

    密码 直接md5和sha1不安全!!! crypt()和hash_equals(): http://php.net/manual/zh/function.crypt.php <?php // c ...

  6. springMVC解决跨域

    原文:https://www.cnblogs.com/shihaiming/p/9544060.html 介绍:   跨站 HTTP 请求(Cross-site HTTP request)是指发起请求 ...

  7. 06 使用bbed提交delete的数据--01

    使用bbed模拟delete提交操作 --session 1 TEST@ orcl )); Table created. TEST@ orcl ,'AAAAA'); row created. TEST ...

  8. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  9. pyenv python 版本控制

    经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...

  10. mooc-IDEA live template--006

    十二.IntelliJ IDEA -live template 以定时器为例: 1.创建一个Template Group... 2.在创建的Template Group下面,创建一个Live Temp ...