杭电 1207 汉诺塔II
来源:互联网 发布:大连房价 知乎 编辑:程序博客网 时间:2024/05/09 06:14
汉诺塔II
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 6 Accepted Submission(s) : 3
Problem Description
经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。 Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?
Input
包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。
Output
对于每组数据,输出一个数,到达目标需要的最少的移动数。
Sample Input
1312
Sample Output
1581
主要是讨论,将一部分按四根柱子的最优方法移到一根柱子上,其余的按三根柱子的最优方法移到指定位置,再将那些移上去,通过循环找出最优。
AC代码如下:
#include<iostream>#include<cmath>using namespace std;__int64 erdemi(__int64 a){ __int64 i,sum=1; for(i=1;i<=a;i++) sum*=2; return sum;}int main(){ __int64 n,i,j; __int64 a[70],min; a[1]=1;a[2]=3;a[3]=5;a[4]=9; for(i=5;i<=64;i++) { min=2*a[i-1]+1; for(j=2;j<=i/2;j++) { if(2*a[i-j]+erdemi(j)-1<min) min=2*a[i-j]+erdemi(j)-1; } a[i]=min; } while(cin>>n) { cout<<a[n]<<endl; } return 0;}
0 0
- 杭电 1207 汉诺塔II
- 【杭电 1207】汉诺塔II
- 杭电--1207--汉诺塔II--数学题
- 杭电OJ 1207 :汉诺塔II
- 杭电1207 汉诺塔II(规律)
- 杭电 1207 (汉诺塔II)(递推)四个柱子的问题
- 【杭电oj】1207 - 汉诺塔II(打表,动态规划)
- acm 杭电 train problem ii 1023
- 杭电 1002[A + B Problem II]
- 杭电 2080 夹角有多大II
- 杭电1002 A + B Problem II
- 杭电 1002:A + B Problem II
- 杭电 1002 A + B Problem II
- 杭电OJ 1023:Train Problem II
- 杭电1002 A+B problem II
- 杭电acm1002A + B Problem II
- 杭电ACM A + B Problem II
- 杭电ACM-A + B Problem II
- 亚太地区在线旅游分销市场的发展前景
- 现场故障案例:AIX安装Oracle10G runInstaller弹出错误一例
- chart图表js
- 黑马程序员-函数总结
- 安顺哪里有出售宠物猴子
- 杭电 1207 汉诺塔II
- 基于深度数据的人脸识别_研究日志1
- JAVA内存分析
- android笔记 adb命令
- Linux(ubuntu)下30天自制os学习引导,第3.0天(读取u盘第二扇区到内存)
- ThinkPHP内部函数功能概述
- Hbase 用HTablePool 类获取hbaseTable报错
- Android基础--selector
- 在servlet中获取textarea数据