汉诺塔VII

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1503 Accepted Submission(s): 1077
 
Problem Description
n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系 : 
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
ai是A柱上的盘的盘号系列,bi是B柱上的盘的盘号系列, ci是C柱上的盘的盘号系列,最初目标是将A柱上的n个盘子移到C盘. 给出1个系列,判断它是否是在正确的移动中产生的系列.
例1:n=3
3
2
1
是正确的
例2:n=3
3
1
2
是不正确的。
注:对于例2如果目标是将A柱上的n个盘子移到B盘. 则是正确的.
Input
包含多组数据,首先输入T,表示有T组数据.每组数据4行,第1行N是盘子的数目N<=64.
后3行如下
m a1 a2 ...am
p b1 b2 ...bp
q c1 c2 ...cq
N=m+p+q,0<=m<=N,0<=p<=N,0<=q<=N,
Output

            对于每组数据,判断它是否是在正确的移动中产生的系列.正确输出true,否则false
Sample Input
6
3
1 3
1 2
1 1
3
1 3
1 1
1 2
6
3 6 5 4
1 1
2 3 2
6
3 6 5 4
2 3 2
1 1
3
1 3
1 2
1 1
20
2 20 17
2 19 18
16 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Sample Output
true
false
false
false
true
true

题解:借助人家的代码,方法是找第n个盘子要在A盘或者C盘;

下面是人家的思路:

①考虑最大盘子 n 号盘子,移动方向为A——>C,它只能在A或者C上,如果它在B上,则为false;

②如果 n 号盘子在 A 上,则其上的 n-1 号盘子必处于从A——>B的移动过程中,此时最大盘号为 n-1,移动方向为A—>B;

③如果 n 号盘子在 C 上,则其上的 n-1 号盘子必处于从B——>C的移动过程中,此时最大盘号为 n-1,移动方向为B—>C;

代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
#define mem(x) memset(x,0,sizeof(x))
#define SI(x) scanf("%d",&x)
#define PI(x) printf("%d",x)
#define SL(x) scanf("%lld",&x)
#define P_ printf(" ")
#define T_T while(T--)
const int MAXN=70;
int a[4][MAXN];
bool work(int n,int m,int p,int q){//最大的盘子一定在A盘或者c盘上; if(n==0)return true;//PI(n);if(a[m][a[m][0]]==n){a[m][0]--;return work(n-1,m,q,p);}if(a[q][a[q][0]]==n){a[q][0]--;return work(n-1,p,m,q);}return false;
}
int main(){int n,m,p,q,T;SI(T);T_T{SI(n);SI(a[1][0]);for(int i=a[1][0];i>=1;i--)SI(a[1][i]);SI(a[2][0]);for(int i=a[2][0];i>=1;i--)SI(a[2][i]);SI(a[3][0]);for(int i=a[3][0];i>=1;i--)SI(a[3][i]);if(work(n,1,2,3))puts("true");else puts("false");}return 0;
}

  

转载于:https://www.cnblogs.com/handsomecui/p/5169947.html

汉诺塔VII(递推,模拟)相关推荐

  1. hdu 2064汉诺塔III 递推

    汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...

  2. 《算法竞赛进阶指南》打卡-基本算法-AcWing 96. 奇怪的汉诺塔:递推

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 本题的汉诺塔问题是n个盘子4个塔,最基本的汉诺塔是n个盘子3个塔.本题是要在后者的基础上来做. 设d[i]表示i盘3塔问题的最小移动 ...

  3. 96. 奇怪的汉诺塔【递推】

    这是一道很经典的问题. 先看3个塔的情况 需要注意的是,这里的汉诺塔移动并无只可以移动到相邻塔的需求.即可以直接从A移到C. 设d[i]表示将i个盘子从这里移到其他除它之外塔的步数 ,总塔的数量为3 ...

  4. 四柱子汉诺塔—递归—递推

    三塔:递推式:d[n] = 2 * d[n-1] + 1 即把前n-1个盘子从A柱移到B柱,然后把A柱上剩的那一个盘子移动到C柱,最后把B柱上的那n-1个盘子移动到C柱上 四塔:递推式:f[n] = ...

  5. 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII

    汉诺塔II:(hdu1207) /先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上, 规则小的必需放在大的上面,每次搬一个,求最小步数.这个问题简单,DP: ...

  6. 【HDU 1997】汉诺塔VII

    汉诺塔VII(题目链接) 思路 本文参考了下列文章 汉诺塔的回顾和深刻 汉诺塔VII 首先用数组将每一个样例的状态存储 数组的每一行存储一个柱子的状态 每一行的第0列存储柱子上盘子的数目 其后从下到上 ...

  7. HDU 1997 汉诺塔VII

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

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

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

  9. 杭电_ACM_汉诺塔VII

    Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上, ...

最新文章

  1. linux 查看mysql安装目录_Linux环境下安装MySQL数据库示例教程
  2. 密钥方式登录linux,Linux的密钥对的方式登录方式
  3. linux程序 option,long-option.c/解析命令行参数
  4. RHEL5中mdadm配置raid5磁盘阵列
  5. python打开文件报错无效序列_解决Python 写文件报错TypeError的问题
  6. 新一代国际视频编解码标准正式出炉,腾讯超100项提案获标准采纳
  7. 3.OSPF协议及链路状态算法
  8. 在NHibernate的单表继承模式下通过父类Repository查询子类
  9. 判断活动窗口_蒙城活动推拉棚定做厂家
  10. C++使用major做变量名的问题
  11. ASP.NET中的图片缓存
  12. android google地图点聚合样式修改
  13. 取消参考文献自动编号_取消参考文献引用 - 卡饭网
  14. android offtime编程,OFFTIME - 做功课就憋玩手机了! - Android 应用 - iPad - 【最美应用】...
  15. 百度冰桶算法2.0简介
  16. 20年,中国互联网主流产品的演变和逻辑
  17. python卷积神经网络预测股价_利用神经网络预测股票市场
  18. Bloxorz POJ3322
  19. C#叠加合并半透明图像的两种实现
  20. 8.5.3耳麦拔插事件调用流程分析

热门文章

  1. 《Python编程从入门到实践》记录之Python函数传递任意数量的实参
  2. (转) 深度模型优化性能 调参
  3. 并发量,QPS,TPS,看这一篇就够了
  4. yum install git Could not resolve host: ftp.twaren.net; Unknown error
  5. java lobo使用_[持续更新]Cobra:Java HTML parser用法详解
  6. 信安教程第二版-第15章网络安全主动防御技术与应用
  7. python 自动获取所有设备信息-使用Python脚本来获取Cisco设备信息的示例
  8. Javascript---条件运算符
  9. 搞定Server 2008蓝牙问题
  10. 视图with check option语句详解