机器人塔(蓝桥杯)

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

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

例如:
用户输入:
1 2

程序应该输出:
3

再例如:
用户输入:
3 3

程序应该输出:
4
解题思路:根据题目我们可以发现,要想拼成一个完整的塔,必须保证A和B都要用完,而上面的服装类型都是根据下面的服装类型决定的,于是我们只需要搜索最下面一层塔的所有服装情况的全排列,在这个基础上建立塔,每使用一个A或B相应的服装数量减少,如果在建立途中就已经用完了A或B说明这种方案不可行,直接剪掉,也就是我们说的剪枝。搜索完所有方案便能得出最终结果
这里我用二维整型数组a存储塔,1表示A,2表示B

#include 
using namespace std;
int map1[1001],a[501][501],N,M,n,A,B,ans=0;//map1表示映射 根据A和B的和能算出对应的最下面一层是多少 
void dfs(int step)//表示最后一层的第step列 
{
     

你可能感兴趣的:(搜索算法,蓝桥杯,dfs,算法,c++,剪枝)