题目描述
X星球的机器人表演拉拉队有两种服装,A和B。
他们这次表演的是搭机器人塔。

类似:

 A
B B

A B A
A A B B
B B B A B
A B A B B A

队内的组塔规则是:

A 只能站在 AA 或 BB 的肩上。
B 只能站在 AB 或 BA 的肩上。

你的任务是帮助拉拉队计算一下,在给定A与B的人数时,可以组成多少种花样的塔。

输入一行两个整数 M 和 N,空格分开(0<M,N<500),分别表示A、B的人数,保证人数合理性。

要求输出一个整数,表示可以产生的花样种数。
输入
输入一行两个整数 M 和 N,空格分开(0<M,N<500),分别表示A、B的人数,保证人数合理性。
输出
要求输出一个整数,表示可以产生的花样种数。
样例输入
1 2
样例输出
3
思路:我们从顶开始往下分析,对于这一行的字符串排列顺序,如果开头确定了,那么后面的随之也就确定了,因此分类讨论就可以了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;int n,m;inline ll dfs(int a,int b,int len,string s)
{if(a==0&&b==0) return 1ll;if(len==0) return dfs(a-1,b,1,"A")+dfs(a,b-1,1,"B");else{string t="";int c=a,d=b;ll sum=0;if(s[0]=='A') {if(c>=2){t+="AA";c-=2;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";}if(d>=2){t+="BB";d-=2;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";}}c=a,d=b,t="";if(s[0]=='B'){if(c&&d){t+="AB";c--,d--;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";t+="BA";c--,d--;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";}}return sum;}
}
int main()
{while(~scanf("%d%d",&n,&m)){printf("%lld\n",dfs(n,m,0,""));}return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][2015年第六届真题]机器人塔(DFS)相关推荐

  1. 问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区

    问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区 时间限制: 1Sec 内存限制: 128MB 提交: 310 解决: 211 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区 ...

  2. [蓝桥杯][2015年第六届真题]生命之树(树形dp)

    题目描述 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  3. [蓝桥杯][2015年第六届真题]密文搜索(排序+二分)

    题目描述 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一份资料 ...

  4. [蓝桥杯][2015年第六届真题]表格计算(递归+记忆化)

    题目描述 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可以是一 ...

  5. [蓝桥杯][2015年第六届真题]穿越雷区

    文章目录 题目描述 输入 输出 样例输入 样例输出 c语言AC代码 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去( ...

  6. 蓝桥杯2015年第六届真题-穿越雷区

    题目 题目链接 题解 BFS模板题. 就在模板题的基础上稍微加了点限制而已. 我用的是pair存的,first表示位置,将二维压缩成一维了:second表示步数: 要求正负交替,我就采用异或的思想进行 ...

  7. 蓝桥杯2015年第六届真题——穿越雷区(C/C++)

    穿越雷区 一.题目内容 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征) ...

  8. 蓝桥杯2015年第六届C/C++ B组省赛习题题解

    目录 第一题:奖券数目 第二题:星系炸弹(日期计算) 第三题:三羊献瑞(全排列) 第四题:格子中输出 第五题:九数组分数(dfs) 第六题:加法变乘法(枚举) 第七题:牌型种数(dfs+dp) 第八题 ...

  9. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)

    题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中. 已知扫地机器人每分钟可以移动到左右相邻的方 ...

最新文章

  1. 自动驾驶与汽车安全电子技术
  2. css3中的box-sizing属性
  3. java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?
  4. SQL 导出表数据存储过程
  5. es创建索引库报错 :Types cannot be provided in put mapping requests, unless the include_type_na
  6. 拓端tecdat:R语言贝叶斯广义线性混合效应(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据
  7. java1.8下载安装教程
  8. 华为星环大数据_华为和星环大数据平台关键能力对比(附报告)
  9. Windows下linux传盘工具,Windows下安装红旗Linux及工具盘全过程
  10. SPSS实现多因素方差分析
  11. 项目答辩演讲稿(详细原文)
  12. 自我觉察日志——9.17 (为什么老想买东西?)
  13. Redis-使用redis-trib构建集群
  14. 光环python培训
  15. IT互联网行业猎头的年终总结:结束后开始
  16. 华为p30怎么删掉云相册的照片_华为手机云空间满了,教你如何清理
  17. Twin Builder—系统级多物理域数字孪生平台
  18. 【JavaScript】9.基本引用类型-原始值包装类型
  19. parted 4T磁盘
  20. 【AI测试】人工智能测试整体介绍——第二部分

热门文章

  1. logo是啥_乐夏2开播,33支乐队的Logo设计,凭啥一个塑料袋最火?
  2. python坐标轴刻度设置_学习python中matplotlib绘图设置坐标轴刻度、文本
  3. 【BUG记录】在onCreate()方法handler调用方法导致程序闪退
  4. android离线宝,Android 离线安装宝典
  5. 西部数据硬盘支持linux,西部数据开发新的Linux文件系统“Zonefs” 支持在分区块设备上运行...
  6. php用户注册重复_php 验证用户名重复
  7. .net html转为pdf,.NET使用DinkToPdf将HTML转成PDF的示例代码
  8. android百度地图 描点,百度地图批量描点写字
  9. java线程不执行_java线程池,阿里为什么不允许使用Executors?
  10. mysql 命名 冲突_MySQL中字段名和保留字冲突的解决办法