第七届蓝桥杯国赛 机器人塔
来源:互联网 发布:淘宝刷单is房间推荐 编辑:程序博客网 时间:2024/06/05 16:35
题意
X星球的机器人表演拉拉队有两种服装,A和B。他们这次表演的是搭机器人塔。类似: A B B A B A A A B B B B B A BA 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资源约定:峰值内存消耗 < 256MCPU消耗 < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
解题思路
搜了好久都没有搜到官方题解,貌似数据大了都会超。
对于机器人塔,只要最下面一行确定了,其余的都确定了,所以暴力枚举最后一行的情况,然后统计每种情况下的A,B字符数目,判断是否满足条件。
感觉可以剪枝,想不出来………….
代码实现
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define maxn 50int ans=0,row;int m,n;char s1[maxn],s2[maxn];void judge(){ int numa=0,numb=0; int z=row; strcpy(s2+1,s1+1); while(z) { for(int i=1;i<=z;i++) if(s2[i]=='A') numa++; else numb++; z--; for(int i=1;i<=z;i++) if(s2[i]==s2[i+1]) s2[i]='A'; else s2[i]='B'; } if(numa==m&&numb==n) ans++;}void dfs(int cur){ if(cur==row+1) { judge(); return ; } s1[cur]='A'; dfs(cur+1); s1[cur]='B'; dfs(cur+1);}int main(){ scanf("%d %d",&m,&n); int i=1; while((i*i+i)/2!=m+n) i++; row=i; dfs(1); printf("%d\n",ans); return 0;}
阅读全文
0 0
- 第七届蓝桥杯国赛 机器人塔
- 蓝桥杯--第七届决赛:机器人塔
- 机器人塔 第七届蓝桥杯javaA组
- 2016 第七届 蓝桥杯 国赛 机器人塔
- 第七届蓝桥杯决赛JavaA组第四题_机器人塔
- 第七届蓝桥杯大赛个人赛(软件类)决赛——机器人塔
- 蓝桥杯—C语言B组 第七届决赛题解:机器人塔
- 【第七届蓝桥杯大赛个人赛(软件类)决赛B组 机器人塔】+ dfs
- 机器人塔
- 机器人塔
- 机器人塔
- 湖南省第七届大学生计算机程序设计竞赛---机器人的指令
- 蓝桥杯之机器人塔
- 机器人
- 机器人
- 机器人
- 机器人
- 机器人
- 一秒钟心情
- Spring源码学习--AOP那点事(二)
- ajax+form实现无刷新
- 进程同步-对于synchronized的理解
- POJ 2377 Bad Cowtractors [图论.最小生成树] 《挑战程序设计竞赛》2.5
- 第七届蓝桥杯国赛 机器人塔
- Nagios 监控配置及实战
- AFN
- C语言之--getrlimit()与setrlimit()
- ASI
- ASI和AFN的区别
- [Unity踩坑系列]在Unity4.x里禁用粒子culling(no renderering when off screen)
- JSON解析
- 深入分析ConcurrentHashMap