题意
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
解题思路
【蓝桥杯|第七届蓝桥杯国赛 机器人塔】搜了好久都没有搜到官方题解,貌似数据大了都会超。
对于机器人塔,只要最下面一行确定了,其余的都确定了,所以暴力枚举最后一行的情况,然后统计每种情况下的A,B字符数目,判断是否满足条件。
感觉可以剪枝,想不出来………….
代码实现
#include
#include
#include
using namespace std;
#define maxn 50
int 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;
}
推荐阅读
- Python|【蓝桥杯真题】提升篇 详解 Python
- 蓝桥杯|蓝桥杯python(扫地机器人)
- Python|【蓝桥杯国赛真题】备战24天 Python
- Python|【蓝桥杯真题】Python备战28天
- 备战蓝桥杯|2020年第十一届蓝桥杯省赛Python组(真题+解析+代码)(跑步锻炼)
- 蓝桥杯|蓝桥杯——机器人行走
- 蓝桥杯|【蓝桥杯】【python】扫地机器人-烂尾楼+1
- 算法|Acwing1210. 连号区间数
- 算法|蓝桥云课 最大距离