问题描述

小蓝很喜欢玩汉诺塔游戏。
游戏中有三根柱子,开始时第一根柱子上有 n 个圆盘,从上到下圆盘的大小依次为 1 到 n。
每次,可以将一个盘子从一根柱子上移动到另一根柱子上,这个盘子必须是柱子最上方的盘子,而且移到的柱子上的盘子必须比这个盘子大。
小蓝的目标是将所有的盘子移动到第三根柱子上。
汉诺塔是个经典问题,当盘子数量为 n 时,最少需要移动 2n−12^n-12n−1 步,其中 2n2^n2n 表示 2 的 n 次方。
小蓝已经玩了一会儿(不一定按最优方案玩),他想知道,对于他目前的局面,最少还需要多少步可以到达目标。

输入格式

输入的第一行包含三个非负整数 a, b, c,分别表示目前每根柱子上的盘子数。在本题中,n=a+b+c。
第二行包含 a 个整数,相邻的整数之间使用一个空格分隔,表示第一根柱子上的盘子,盘子按从上到下(从小到大)的顺序给出。
第三行包含 b 个整数,相邻的整数之间使用一个空格分隔,表示第二根柱子上的盘子,盘子按从上到下(从小到大)的顺序给出。
第四行包含 c 个整数,相邻的整数之间使用一个空格分隔,表示第三根柱子上的盘子,盘子按从上到下(从小到大)的顺序给出。

输出格式

输出一行包含一个整数,表示答案。

样例输入

1 2 3
1
2 3
4 5 6

样例输出

7

评测用例规模与约定

对于 30% 的评测用例,2 <= n <= 5。
对于所有评测用例,2 <= n <= 60。

递归C++

本题还是一个递归问题,不过依据题意来看,会出现其中几块汉诺塔已经放好的情况,我们需要分几个情况讨论。

  1. 当盘子已经在第k个杆子上时,递归处理n-1个盘子
  2. 如果第n个盘子不在第k个杆子上,我们需要:
    1)将前n-1个盘子移动到既不在第k个杆子,也不在第n个盘子所在杆子上;
    2)将第n个盘子移动到k杆;
    3)根据题意,当盘子数量为 n 时,最少需要移动 2n−12^n-12n−1 步。我们把剩余的n-1个盘子移动到k需要2n−1−12^{n-1}-12n−1−1步
#include <iostream>
using namespace std;
typedef long long LL;
int a, b, c, n;
int d[4][100], p[100];// 计算将1-n个盘子移动到k需要多少步
LL dfs(int n, int k) {if (n == 0) return 0;if (p[n] == k) return dfs(n-1, k);return dfs(n-1, 6 - k - p[n]) + (1LL << (n-1));
}int main() {cin >> a >> b >> c;for (int i = 0; i < a; i++) {cin >> d[1][i];p[d[1][i]] = 1; // 记录盘子在哪个杆子上}for (int i = 0; i < b; i++) {cin >> d[2][i];p[d[2][i]] = 2;}for (int i = 0; i < c; i++) {cin >> d[3][i];p[d[3][i]] = 3;}n = a+b+c;cout << dfs(n, 3) << endl;return 0;
}

2022蓝桥模拟-子汉诺塔相关推荐

  1. 汉诺塔html5游戏代码,用html5模拟的汉诺塔

    今天学习html5拖动的时候突然想到可以用html5来模拟个汉诺塔,说做就做.以下是我的实现,比较简单勿喷,不过欢迎指正和探讨 .container{border:solid 1px black;wi ...

  2. 227 用栈模拟汉诺塔问题

    原题网址:https://www.lintcode.com/problem/mock-hanoi-tower-by-stacks/description 描述 在经典的汉诺塔问题中,有 3 个塔和 N ...

  3. jzoj2136-(GDKOI2004)汉诺塔【找规律,模拟】

    正题 大意 将汉诺塔的规则改为只能移动到相邻的柱子,然后求有n个圆盘时在第m步时每个盘所在的位置. 解题思路 我们先将3个盘的移动情况推出来:(1,1,1)->(2,1,1)->(3,1, ...

  4. 【蓝桥杯每日一练】 汉诺塔

    目录 1.说明 2.解法 3.python实现 python全局变量使用方式: python全局变量和局部变量的区别: 1.说明 河内之塔(Towers of Hanoi)是法国人M.Claus(Lu ...

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

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

  6. [蓝桥杯历届试题] 汉诺塔计数

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆 ...

  7. 汉诺塔的非递归实现(借助堆栈模拟递归)

    汉诺塔的非递归实现 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n,a,b,c).即将n个盘子从起始柱(标记为"a")通过借助柱(标记为"b")移动到目标杜( ...

  8. 汉诺塔问题——分治思想

    汉诺塔规则如下: 1.有三根相邻的柱子,标号为x,y,z. 2.x柱子上从下到上按金字塔状叠放着n个不同大小的圆盘. 3.现在把所有盘子一个一个移动到柱子z上,并且每次移动同一根柱子上都不能出现大盘子 ...

  9. 经典汉诺塔(Java初学递归篇)

    大一学C的时候已经接触到汉诺塔递归的问题,当时只是简单了解过方法,最近开了算法课,打算重新捋一捋. 题目描述:         有三根柱子分别为A.B.C,柱子A上从下到上按金字塔状叠放着n个不同大小 ...

最新文章

  1. 在数组中查找一个数并输出所处位置
  2. linux共享库 == windows动态库
  3. 深度学习试题_高中生物:今年高考试题3点显著变化及5个备考建议!不看准吃亏...
  4. php的延时sleep函数
  5. android studio电影院选座,8排电影院选座最佳位置
  6. 等保2.0安全管理制度对比_一手资料!等保2.0云计算安全与风险评估
  7. mysql查找表shoe table,mysql命令行常用命令
  8. VB 二进制文件的操作
  9. Oracle 10g 安装教程
  10. 《企业架构的数字化转型》10000字有感
  11. CPC客户端打开报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  12. 破解软件以及奇奇怪怪的网站集合
  13. 大疆御air2怎么看经纬度_人人都能拍大片的无人机 – 大疆御 Mavic Air 2 评测
  14. 手机号码归属地查询 java_JAVA手机号码归属地查询
  15. Windows10卸载密钥导致win10未激活--解决
  16. itextpdf 怎么下划线_itext生成pdf设置下划线,itextpdf下划线,使用setUnderli
  17. SEDANSPOT Detecting Anomalies in Edge Streams阅读记录
  18. 如何让自己时刻冷静的方法_怎么让心静下来(让心静下来的5种方法)
  19. iOS游戏《胖鸟大冒险》上架app store+感想
  20. 函函函函函函函函函函函数——two

热门文章

  1. 【Arduino学习笔记】系列1 - 定时器配置
  2. vue之table案例
  3. 12C ORA-错误汇总20
  4. godot引擎学习4
  5. 爬虫之短信验证码自动化接收——Tasker
  6. 计算机音乐谱恋人心,天刀曲谱大全_天涯明月刀曲谱恋人心
  7. CTFHub | 弱口令
  8. ICDAR 2019 CROHME + TFD比赛 手写数学表达识别与排版公式检测的竞争
  9. 【HigherHRNet】 HigherHRNet 详解之 HigherHRNet的热图回归代码
  10. 【风马一族_SQL Server】