HDU 2511二分+汉诺塔
问题描述:求n阶汉诺塔第x步移动策略
开始的时候以为是汉诺塔的递归模拟,然后果断超时了。由于汉诺塔步骤1和步骤3的操作数相同,所以这里用二分查找来加速。
n阶汉诺塔需要移动2^n-1次,所以mid=(2^n-1+1)/2=2^n-1,
当step>mid时,step-=mid,转化成n-1阶汉诺塔。
#include<stdio.h>long long step,f[64];void bsHanoi(int n,int a,int b,int c) {long long mid=f[n-1];if(step==mid){printf("%d %d %d\n",n,a,c);return ;}if(step<mid)bsHanoi(n-1,a,c,b);else{step-=mid;bsHanoi(n-1,b,a,c);}}int main() {int i,t;for(i=1,f[0]=1;i<64;i++)f[i]=f[i-1]<<1;scanf("%d",&t);while(t--){int n;scanf("%d%I64d",&n,&step);bsHanoi(n,1,2,3);}return 0; }
递归汉诺塔模版:
void hannoi (int n, char A, char B, char C) //A移动到C,借助B,
{if (n == 1){cout << "Move disk " << n << " from " << A << " to " << C << endl;}else{hannoi (n-1, A, C, B);cout << "Move disk " << n << " from " << A << " to " << C << endl;hannoi (n-1, B, A, C);} }
转载于:https://www.cnblogs.com/zhen94/p/3555004.html
HDU 2511二分+汉诺塔相关推荐
- 【HDU 1997】汉诺塔VII
汉诺塔VII(题目链接) 思路 本文参考了下列文章 汉诺塔的回顾和深刻 汉诺塔VII 首先用数组将每一个样例的状态存储 数组的每一行存储一个柱子的状态 每一行的第0列存储柱子上盘子的数目 其后从下到上 ...
- 汉诺塔 X HDU - 2511
题目: 1,2,-,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在第1根柱子上的盘子是a[1],a[2],-,a[n]. a[1]=n,a[2]=n-1,-,a[n] ...
- 汉诺塔III HDU - 2064
汉诺塔III HDU - 2064 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的 ...
- 汉诺塔问题 hdu 2064 hdu1997
hdu 1997汉诺塔 题目分析: 转自:http://lcc3536.blog.163.com/blog/static/132469917201132283640123/ 1) 最初我们要判断一下 ...
- 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...
- 二分查找、分治算法——汉诺塔问题
一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...
- HDU——2064汉诺塔III
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 2064:汉诺塔III
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- hdu 2064汉诺塔III 递推
汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...
- HDU 1207 汉诺塔II (递推)
经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...
最新文章
- 程序员该如何抉择公司?
- 智源x清华开源FastMoE,万亿AI模型基石
- RMAN backup validate database on databases in noarchivelog mode
- python version 3.4 required_Python version 3.3 required, which was not found in the registry
- C语言标准数学函数库math.h之常用函数介绍
- Apache启动过程(PHP_MINIT_FUNCTION的调用)
- Ranger-Sqoop2插件安装
- Mounting A Windows Share On AIX Using CIFS
- “寒门状元之死”文章引热议 京东徐雷:三流文学作品 多看书吧
- oracle创建索引后sqlldr导入错误
- RGB图像任意角度旋转
- 2019-07-11 nginx 下网页显示乱码
- maven私服搭建及应用
- RecyclerView-- 侧滑删除和拖动排序
- vue前端项目打包并且在服务器上部署过程
- java基于ssm医院病历管理系统
- 交换机端口tagged与untagged
- 影响RAID 0性能的因素
- 如何保存Win10壁纸
- Python串口异步通信
热门文章
- Flink 在众安保险金融业务的应用
- Flink 在快手实时多维分析场景的应用
- 刚刚!中科院主导的国产编程语言木兰负责人回应了!承认32位机器上,是基于Python二次开发!...
- Python数据分析、挖掘常用工具
- 移动App 网络优化细节探讨
- 单按钮启停电路实物图_什么是电路的主回路?什么是控制回路?它们之间有什么区别?...
- jdk32位安装包下载_MySQL 8.0.19安装图文详解!手把手教会您从下载到安装成功
- 类图中表达总体与局部的关系_软件工程测试题3
- python表格数据过滤复制到另外一个表格
- JQuery 四个常用的DOM操作获得内容 - text()、html()、value 以及 val() ;取属性值attr()----前三个有回调函数