B

.

2

B. 【例题2】奇怪汉诺塔

B.【例题2】奇怪汉诺塔

题目描述

汉诺塔问题,条件如下:

  1. 这里有

    A

    A

    A、

    B

    B

    B、

    C

    C

    C 和

    D

    D

    D 四座塔。 这里有

    n

    n

    n个圆盘,

    n

    n

    n 的数量是恒定的。

  2. 每个圆盘的尺寸都不相同。
  3. 所有的圆盘在开始时都堆叠在塔

    A

    A

    A上,且圆盘尺寸从塔顶到塔底逐渐增大。

  4. 我们需要将所有的圆盘都从塔

    A

    A

    A 转移到塔

    D

    D

    D 上。

  5. 每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。
  6. 请你求出将所有圆盘从塔

    A

    A

    A 移动到塔

    D

    D

    D,所需的最小移动次数是多少。


输入格式

没有输入。


输出格式

对于每一个整数

n

(

1

n

12

)

n(1 ≤ n ≤ 12)

n(1≤n≤12),输出一个满足条件的最小移动次数,每个结果占一行。


题目解析

看题目,是汉诺塔,只是常规的三塔变成了四塔.
那么我们就考虑四塔的做法.

首先我们定义

d

i

d_{i}

di​为三塔时

n

n

n个盘从

A

A

A塔到

C

C

C塔所需的步数.
那么可以得出(证明略):

d

1

=

1

d_{1} = 1

d1​=1

d

i

=

d

i

1

2

1

(

i

>

1

)

d_{i} = d_{i-1}*2-1~~~~~~~~~~~~~~(i>1)

di​=di−1​∗2−1              (i>1)

然后我们定义

f

(

i

)

f(i)

f(i)为四塔汉诺塔的最优步数为考虑四塔汉诺塔的算法思想,叫Frame算法:

  1. 用四柱汉诺塔算法把

    A

    A

    A柱上部分的

    n

    r

    n- r

    n−r个碟子通过

    C

    C

    C柱和

    D

    D

    D柱移到

    B

    B

    B柱上(

    f

    (

    n

    r

    )

    f( n- r )

    f(n−r)步)。

  2. 用三柱汉诺塔经典算法把

    A

    A

    A柱上剩余的

    r

    r

    r个碟子通过

    C

    C

    C柱移到

    D

    D

    D柱上(三塔汉诺塔

    r

    r

    r盘的步数)。

  3. 用四柱汉诺塔算法把

    B

    B

    B柱上的

    n

    r

    n-r

    n−r个碟子通过

    A

    A

    A柱和

    C

    C

    C柱移到

    D

    D

    D柱上(

    f

    (

    n

    r

    )

    f(n-r)

    f(n−r)步)。

  4. 依据上边规则求出所有

    r

    (

    1

    r

    n

    )

    r(1≤r≤n)

    r(1≤r≤n)情况下步数

    f

    (

    n

    )

    f(n)

    f(n),取最小值得最终解。

f

[

i

]

=

m

i

n

{

f

[

i

]

2

f

[

j

]

+

d

[

i

j

]

f[i] = min \left\{\begin{matrix} & f[i]\\ & 2 * f[j] + d[i - j]\\ \end{matrix}\right.

f[i]=min{​f[i]2∗f[j]+d[i−j]​


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std; ll d[305], f[305]; int main ()
{
d[1] = f[1] = 1;
for (int i = 2; i <= 12; ++ i)
d[i] = d[i - 1] * 2 + 1;
for (int i = 2; i <= 12; ++ i)
{
f[i] = 999999999;
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)
printf ("%d\n", f[i]);
return 0;
}

[递推]B. 【例题2】奇怪汉诺塔的更多相关文章

  1. C++例题2:汉诺塔问题

    #include<iostream>#include<stdlib.h>using namespace std;void Hanoi(int n,char A,char B,c ...

  2. HDU 汉诺塔系列

    做了这一系列题,表示对汉诺塔与这一系列递推理解加深了 经典汉诺塔:1,2,...,n表示n个盘子,数字大盘子就大,n个盘子放在第1根柱子上,按照从上到下 从小到大的顺序排放,过程中每次大盘都不能放在小 ...

  3. 【BZOJ 1019】【SHOI2008】汉诺塔(待定系数法递推)

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 559  Solved: 341[Submit][Status] ...

  4. 汉诺塔III 递推题

    题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动 ...

  5. BZOJ 1019 :[SHOI2008]汉诺塔(递推)

    好吧蒟蒻还是看题解的 其实看到汉诺塔就该想到是递推了 设f[i][j]表示i个在j杆转移到另一个杆的次数 g[i][j]表示i个在j杆转移到那个杆上 可得 f[i][j]=f[i-1][j]+1+f[ ...

  6. hdu 1207 汉诺塔II (DP+递推)

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

  7. Acwing-96-奇怪的汉诺塔(递推)

    链接: https://www.acwing.com/problem/content/description/98/ 题意: 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆 ...

  8. HDU 1207 汉诺塔II (递推)

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

  9. HDU 1207 汉诺塔II (找规律,递推)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others)     ...

随机推荐

  1. 手机 wifi 已连接,不可上网 bug

    手机 wifi 已连接,不可上网 bug 同一个 Wi-Fi,电脑却可以? 注意事项 Mac 共享热点支持有线连接.蓝牙连接的网络进行共享. 如果你的 Mac 本身是通过 wifi 来连接上网的,那就 ...

  2. taro 滚动事件

    taro 滚动事件 taro scroll bug ScrollView https://nervjs.github.io/taro/docs/components/viewContainer/scr ...

  3. nasm astrlwr_s函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  4. c++ string split function

    #include <string> #include <vector> #include <regex> struct SplitListItem { std::s ...

  5. NGK算力生态建设者狂欢!SPC之后又有VAST!

    想致富,先挖矿.这句话已经成为了币圈的一句名言.挖矿一词始终贯穿着区块链以及数字加密领域. 据小道消息透露,NGK官最近将会推出两款挖矿产品---SPC星空币以及其子币VAST维萨币. 下面笔者就来一 ...

  6. NGK数字钱包的特点是什么?NGK钱包的优点和缺点是什么?

    说起区块链数字资产,那就离不开谈到数字钱包.数字钱包不仅有资产管理的功能,还可以进行资产理财.资产交易,甚至能为公链DAPP导流. 对于NGK公链而言,其数字钱包已然成为了解NGK公链的基础条件.NG ...

  7. mysql数据库表引入redis解决方案

    缓存方案 缓存方案在我的另外一篇博客里有详细说明,地址:https://www.cnblogs.com/wingfirefly/p/14419728.html 数据结构: 方案1: 1.存储结构采用h ...

  8. 2021-2-22:请你说下 CAP 理论并举例

    CAP CAP 理论是分布式系统中的一个老生常谈的理论了,最早由 Eric Brewer 在一个讲座中提出.在这个讲座中,在传统 ACID 理论以及当时比较流行但是比较抽象的的设计指导理论 BASE ...

  9. MySQL数据库与NAVICAT安装与配置

    1.安装破解版的NAVICAT:https://www.cnblogs.com/yinfei/p/11427259.html 2.连接MYSQL 下载MYSQL并安装,配置环境变量 以管理员身份运行C ...

  10. 1090 Highest Price in Supply Chain——PAT甲级真题

    1090 Highest Price in Supply Chain A supply chain is a network of retailers(零售商), distributors(经销商), ...