题目
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)
 
运行结果











