题解:在刚看到这个题的时候想到的是对字符串ab……的组合,但是实现起来可能会超时。把问题抽象画,也就是在下一个站点,李白遇到的可能是店也可能是花,两种可能性 ,发现可以用递归实现。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int cnt;
void deal(int sum,int store,int flower,int flag)
{
if(store==0&&flower==0&&flag==1)
{//递归出口,必须在最后一次遇到花的时候判断
if(sum==0)
{
cnt++;
return;
}
else return;
}
else
{
if(store>0&&sum>0)
deal(sum*2,store-1,flower,0);
if(flower>0&&sum>0)
deal(sum-1,store,flower-1,1);
}
}
int main()
{
int t,n,m,sum;
cin>>t;
while(t--)
{
cin>>m>>n;
cnt=0;
deal(2,m,n,0);
cout<<cnt<<endl;
}
return 0;
}