汉诺塔II|汉诺塔4柱
汉诺塔II|汉诺塔4柱
Problem Description
经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。
Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?
Input
包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。
Output
对于每组数据,输出一个数,到达目标需要的最少的移动数。
Sample Input
1
3
12
Sample Output
1
5
81
注意
这个题目要是不开unsigned long long的话会一直wa。
#include<bits/stdc++.h>
using namespace std;#define int unsigned long long //这个题目要是不开ull就过不了(tu。。。)int f3[70],f4[70];
void init(){f3[0] = 0;for (int i = 1; i <= 64; ++i) {f3[i] = 2 * f3[i - 1] + 1;}memset(f4,0x7f,sizeof f4);f4[0] = 0;for (int i = 1; i <= 64; ++i) {for (int j = 0; j <= i; ++j) {f4[i] = min(f4[i],2 * f4[j] + f3[i - j]);}}
}
signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);init();int n;while (cin>>n){cout<<f4[n]<<"\n";}return 0;
}
汉诺塔II|汉诺塔4柱相关推荐
- 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII
汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...
- 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI
汉诺塔 汉诺塔II hdu1207: 先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,D ...
- 【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】
汉诺塔问题 设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步: 把n-1层移到第二个上面去(花费f(n-1)) 把最大的移到第三个柱子上面去(花费1) 把n-1层移动到第三个柱子上去(花费f( ...
- HDU-1207 汉诺塔II
HDU-1207 汉诺塔II 基础汉诺塔思路 acwing题解 b站视频 #include<iostream> #include<algorithm> #include< ...
- 汉诺塔III 汉诺塔IV 汉诺塔V
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
import java.math.BigInteger; /* * 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序 ...
- 一、汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的。A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆
一.汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的.A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘:大盘不能叠在小盘上面.提示: ...
- hanoi塔(汉诺塔)--C语言
hanoi塔(汉诺塔)–C语言 一.什么是hanoi塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄 ...
- C++汉诺塔问题(河内塔)
C++汉诺塔问题(河内塔) 这是一个非常经典的递归问题. 递归:在函数内部又再次调用函数自身的问题 假设有n个盘子,需要把这些盘子从第一根起始柱A移动到第三根目标柱C中. 1.首先需要把n-1个盘子移 ...
最新文章
- 【目标检测】yolo系列:从yolov1到yolov5之YOLOv3详解及复现
- 穷大学生耍了三大花招成为大富翁!
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
- Kickstart 多系统安装配置
- 小明分享|8ms平台下工程源码分析
- 华为V3.4-RIP命令总结
- 《剑指offer》按之字行顺序打印二叉树
- The 2019 ICPC Asia Shanghai Regional Contest
- ssas表格模型 权限控制_如何在SQL Server 2016中自动执行SSAS表格模型处理
- 绝地求生测试服画面优化软件,绝地求生大逃杀优化方法 画面优化工具使用教程_3DM单机...
- 华为平板m5鸿蒙,华为平板M5系列发布:搭载麒麟960 售价2088元起
- IEC 60335标准介绍
- swustoj水王C语言,swust西南科技大学OJ数据结构80题答案
- 保利威 API设置直播回放
- 油田智能化远程监控系统_油田远程无线监控系统
- 理解分布式账本技术: 经济学视角
- 如何在不重装系统的情况下换固态硬盘?
- 企业微信如何快速高效添加好友?
- xmind 文件 打开后会在当前目录生成 configuration,p2和workspace目录,artifacts.xml文件 解决
- JAVA对图片进行等比/非等比压缩处理
热门文章
- idea 占用内存优化调整
- Windows10局域网找不到共享电脑
- tekla中钢筋外形(TSM.RebarGeometry)
- css样式字体文本汇总
- python分组求和法_python – 如何将groupby值的总和除以另一个值的count
- 潘金莲给武松的最后一封信
- servicecontroller 无法打开计算机 服务,ServiceController似乎无法停止服务
- 路由器中宽带密码查看
- cocos2d-x传智播客_Hanselminutes播客54-压缩持续集成
- Scratch-(六)-妙笔生花