• 机器人塔


    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


    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。

     先求出最后一行可能的情况,在一次往上推,符合条件就找到一种。

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 
     5 public class Main{
     6     static int n;
     7     static int[] c;
     8     static int sum;
     9     public static void main(String[] args) {
    10         Scanner input = new Scanner(System.in);
    11         int a = input.nextInt();
    12         int b = input.nextInt();
    13         while(n+n*n!=2*(a+b)){
    14             n++;
    15         }
    16         c = new int[n];
    17         f(a,b,0);
    18         System.out.println(sum);
    19     }
    20     public static void f(int a,int b,int h){
    21         if(h>=n){
    22             f1(a,b,h-1,c);
    23             return;
    24         }
    25         if(a>0){
    26             c[h] = 0;
    27             f(a-1,b,h+1);
    28         }
    29         if(b>0){
    30             c[h] = 1;
    31             f(a,b-1,h+1);
    32         }
    33     }
    34     public static void f1(int a,int b,int h,int[] d){
    35         if(a<0||b<0){
    36             return;
    37         }
    38         if(h==0&&a==0&&b==0){
    39             sum++;
    40             return;
    41         }
    42         int[] temp = new int[h];
    43         for(int i=0;i<h;i++){
    44             if(d[i]==d[i+1]){
    45                 temp[i] = 0;
    46                 a--;
    47             }else{
    48                 temp[i] = 1;
    49                 b--;
    50             }
    51         }
    52         f1(a,b,h-1,temp);
    53     }
    54     
    55 }
  • 相关阅读:
    iOS 代码让手机震动一下
    iOS开发 --制作圆形的头像(UIImage)
    JAVA基本数据类型和引用数据类型的区别
    jquery基础
    JS基础
    JAVA异常详解
    单例模式详解及java常用类
    JAVA基础之字符串和面向对象
    我的第一篇博客 初识动画,飞机行小动画
    GCD系列:调度组(dispatch_group)
  • 原文地址:https://www.cnblogs.com/lolybj/p/6883962.html
Copyright © 2020-2023  润新知