zoukankan      html  css  js  c++  java
  • [蓝桥杯][2015年第六届真题]机器人塔(dfs)

    题目描述

    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的人数,保证人数合理性。

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

    输入

    输入一行两个整数 M 和 N,空格分开(0<M,N<500),分别表示A、B的人数,保证人数合理性。

    输出

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

    样例输入

    1 2

    样例输出

    3

    提示

    来源

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    int a[50][50];
    int k=1;
    int vis[55];
    int s=0;
    int n,m;
    void dfs(int x)
    {
       if(x==k)
       {
       	for(int j=k-2;j>=0;j--)
       	{
       		for(int kk=0;kk<=j;kk++)
       		if((a[j+1][kk]==0&&a[j+1][kk+1]==1)||(a[j+1][kk]==1&&a[j+1][kk+1]==0))
       		{
       			
       			a[j][kk]=1;
       		}
       		else
       		{
       			
       			a[j][kk]=0;
       		}
       	}
       	int s1=0;
       	int s2=0;
       	for(int t=0;t<k;t++)
       	{
       		for(int j=0;j<=t;j++)
       		{
       		   if(a[t][j]==0)
       		   {
       		   	s1++;
    		   }
    		   else
    		   {
    		   	s2++;
    		   }
       		}
       		
       	}
       	if(s1==n&&s2==m)
       	{
    	   s++;
    	}
       	return ;
       }
       if(vis[x]==0)
       {
       	vis[x]=1;
        a[k-1][x]=1;
       	dfs(x+1);
       	a[k-1][x]=0;
       	dfs(x+1);
       	vis[x]=0;
       }
       
    }
    int main()
    {
    	cin>>n>>m;
    	int sum=0;
    	while(sum+k<n+m)
    	{
    		sum+=k;
    		k++;
    	}
    	dfs(0);
        cout<<s<<endl;
    	return 0;
    }
  • 相关阅读:
    [CF845G]Shortest Path Problem?
    [洛谷P4149][IOI2011]Race
    [洛谷P4178]Tree
    [AtCoder AGC27A]Candy Distribution Again
    [洛谷P3806]【模板】点分治1
    [洛谷P2634][国家集训队]聪聪可可
    [CF280C]Game on Tree
    [洛谷P3338][ZJOI2014]力
    [CF438D]The Child and Sequence
    [CF609E]Minimum spanning tree for each edge
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781741.html
Copyright © 2011-2022 走看看