题目
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
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
Code
# -*- coding:UTF-8 -*-
"""
@Project :蓝桥杯训练营
@File :机器人塔.py
@IDE :PyCharm
@Author :Kinght_123
@Date :2022/1/6 10:27
"""
def dfs(x, s, aa, bb):
global ans
if aa < 0 or bb < 0:
return
if aa == 0 or bb == 0:
ans += 1
return
cs = bs = 0
p = 'A'
cs += 1
for i in range(len(s)):
if s[i] == 'A':
if p[i] == 'A':
p += 'A'
cs += 1
else:
p += 'B'
bs += 1
else:
if p[i] == 'A':
p += 'B'
bs += 1
else:
p += 'A'
cs += 1
dfs(x + 1, p, aa - cs, bb - bs)
cs = bs = 0
q = 'B'
bs += 1
for i in range(len(s)):
if s[i] == 'A':
if q[i] == 'A':
q += 'A'
cs += 1
else:
q += 'B'
bs += 1
else:
if q[i] == 'A':
q += 'B'
bs += 1
else:
q += 'A'
cs += 1
dfs(x + 1, q, aa - cs, bb - bs)
if __name__ == "__main__":
a = int(input())
b = int(input())
ans = 0
c = []
c += 'A'
dfs(1, c, a - 1, b)
c[0] = 'B'
dfs(1, c, a, b - 1)
print(ans)