机器人塔

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的人数,保证人数合理性。

要求输出一个整数,表示可以产生的花样种数。

例如:
用户输入:
1 2

程序应该输出:
3

再例如:
用户输入:
3 3

程序应该输出:
4


题目思路:

  搜索,先枚举最后一层,然后逐层往上迭代,看是否AB够用,够用则ans++。

  如下代码大概能水一些小数据吧——

  (1、把正三角形,改成了等腰直角三角形,更便于遍历;2、先计算出层数,然后底层确定后上面必定是唯一的局面,全部遍历判断即可!)

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <stack>
  7. #include <vector>
  8. #include<math.h>
  9. #include <string.h>
  10. #include<set>
  11. using namespace std;
  12. #define inf 0x3f3f3f3f
  13. #define maxn 10000000
  14. const double pi=acos(-1.0);
  15. #define ll long long
  16. #define N 108
  17. using namespace std;
  18. double fact(double a,double b,double c){
  19. double y=sqrt(-*a*c);
  20. double s=(-b+y)/2.0;
  21. return s;
  22. }
  23. ll ans=;
  24. int a[N][N];
  25. int flag;
  26. void build(int step,int anum,int bnum,int mstep){
  27. if(anum<||bnum<){
  28. return ;
  29. }
  30. if(step==-){
  31. flag=;return ;
  32. }
  33. for(int i=;i<=step;i++){
  34. if(a[step+][i]==a[step+][i+] ){
  35. a[step][i]=;anum--;
  36. }
  37. else a[step][i]=,bnum--;
  38. }
  39. build(step-,anum,bnum,mstep);
  40.  
  41. return ;
  42. }
  43. void dfs(int step,int pos,int anum,int bnum,int mstep){//枚举step行的存储数据,然后往上搭建看看
  44. if(anum<||bnum<){
  45. return ;
  46. }
  47. if(pos==step+){
  48. flag=;
  49. build(step-,anum,bnum,mstep);//按照最后一行进行搭建
  50. ans+=flag;
  51. return ;
  52. }
  53. for(int i=;i<=;i++){
  54. a[step][pos]=i;
  55. if(i==)
  56. dfs(step,pos+,anum,bnum-,mstep);
  57. else
  58. dfs(step,pos+,anum-,bnum,mstep);
  59. }
  60. }
  61. int main(){
  62. int m,n;//分别表示A、B的人数
  63. while(scanf("%d%d",&m,&n)!=EOF){
  64. int x=(int)fact(1.0,1.0,-2.0*(m+n));//表示层数
  65. printf("总行数=%d\n",x);
  66. ans=;
  67. memset(a,-,sizeof(a));
  68. dfs(x,,m,n,x);
  69. printf("%lld\n",ans);
  70. }
  71.  
  72. return ;
  73. }

第七届蓝桥杯C/C++程序设计本科B组决赛 ——机器人塔(程序大题)的更多相关文章

  1. 第七届蓝桥杯C/C++程序设计本科B组决赛 ——凑平方数(填空题)

    凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的.比如:0, 36, 5948721 再比如:10985247361, 25, 63907840, 4, 289, 1 ...

  2. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)

    标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的 ...

  3. 2016年第七届蓝桥杯C/C++程序设计本科B组决赛

    2.答案300 刁丝卫代码,比赛时long long写成int,结果成了263...一等擦肩而过... #include <iostream> #include <fstream&g ...

  4. 第七届蓝桥杯C/C++程序设计本科B组决赛 ——棋子换位(代码补全题)

    棋子换位 有n个棋子A,n个棋子B,在棋盘上排成一行.它们中间隔着一个空位,用“.”表示,比如: AAA.BBB 现在需要所有的A棋子和B棋子交换位置.移动棋子的规则是:1. A棋子只能往右边移动,B ...

  5. 第八届蓝桥杯C/C++程序设计本科B组决赛 ——发现环(编程大题_签到题_tarjan判环)

    标题:发现环 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管理员误操 ...

  6. 2016年第七届蓝桥杯C/C++程序设计本科B组省赛

    /* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...

  7. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛

    1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...

  8. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形

    完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形.历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 12 13 ...

  9. 2016年第六届蓝桥杯C/C++程序设计本科B组决赛 ——一步之遥(填空题题)

    一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按F,会 ...

随机推荐

  1. P/Invoke 技术

    .NET 互操作 首先推荐一本书<精通.NET 互操作> ,这本书是目前中文资料里讲 互操作最详尽的书了. 做系统集成项目的同学应该都和设备打过交道(如视频设备:海康.大华等),在大多数情 ...

  2. centos docker 修改默认存储路径

    1.修改配置 将--graph /mnt/docker添加在docker.service文件中的ExecStart字段后面,其中/mnt/docker为你需要修改的存储目录 $ vim /usr/li ...

  3. alpine docker exec: "/bin/bash": stat /bin/bash: no such file or directory 解决方案

    sudo docker exec -it 1df4f9732e06 sh

  4. HTTP权威指南-URL与资源

    URL与资源 URL是URI的子集 方案(http),主机(www.baidu.com),路径(/home/logo.png) 方案,其实有很多,HTTP.HTTPS.FTP,SMTP等等. http ...

  5. redis服务操作

    端口启动服务./redis/redis-2.8.19/src/redis-server /redis/conf/r6100.conf./redis/redis-2.8.19/src/redis-ser ...

  6. python 之 并发编程(线程Event、协程)

    9.14 线程Event connect线程执行到event.wait()时开始等待,直到check线程执行event.set()后立即继续线程connect from threading impor ...

  7. 09 IO流(六)——ByteArray字节流、流对接

    字节数组流 ByteArray流是节点流. 前面讲到的文件字节流,文件字符流,他们的源都是来自于pc硬盘. 本节要讲的字节数组流的源是来自于内存或网络. 它更合适用来处理来自网络的字节流. 由于源并不 ...

  8. Lucene入门+实现

    Lucene简介详情见:(https://blog.csdn.net/Regan_Hoo/article/details/78802897) lucene实现原理 其实网上很多资料表明了,lucene ...

  9. 通过 Kubeadm 安装 K8S 与高可用,版本1.13.4

    环境介绍: CentOS: 7.6 Docker: 18.06.1-ce Kubernetes: 1.13.4 Kuberadm: 1.13.4 Kuberlet: 1.13.4 Kuberctl: ...

  10. linux安装png2icon方法

    此工具用于将png图片转换为ico格式的文件,一个小工具,但很实用 官网:http://www.winterdrache.de/freeware/png2ico/ 下载: wget http://ww ...