2016 第七届 蓝桥杯 国赛 机器人塔

来源:互联网 发布:虚拟机下安装linux 编辑:程序博客网 时间:2024/05/16 11:58

机器人塔

X星球的机器人表演拉拉队有两种服装,A和B。
他们这次表演的是搭机器人塔。

类似:

 AB 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

package lq.lq2016;import java.util.Scanner;public class RobotTower {    static int len;    static int num[] = new int[2];    static int[] ans = new int[50];    static int res = 0, m, n;    static boolean pd(int[] last) {        int an = 0, bn = 0;        for (int i = 0; i < len; i++) {            if (last[i] == 0)                an++;            else                bn++;        }        int[] tmp = new int[len];        for (int i = len; i >= 2; i--) {            for (int j = 0; j < i - 1; j++) {                if ((last[j] ^ last[j + 1]) == 0) {                    an++;                    tmp[j] = 0;                } else {                    bn++;                    tmp[j] = 1;                }            }            System.arraycopy(tmp, 0, last, 0, len);        }        if (an == m && bn == n)            return true;        else            return false;    }    static void dfs(int ind) {        if (ind == len) {            if (pd(ans)) {                res++;                for (int i = 0; i < len; i++) {                    System.out.print(ans[i]);                }                System.out.println();            }            return;        }        for (int i = 0; i < 2; i++) {            if (num[i] == 0)                continue;            else {                ans[ind] = i;                num[i]--;                dfs(ind + 1);                num[i]++;            }        }    }    static int getLen(int sum) {        int len = 0, tsum = 0;        for (int i = 1; i <= 50; i++) {            tsum += i;            if (tsum == sum) {                len = i;                break;            }        }        return len;    }    public static void main(String[] args) {        //        Scanner sc = new Scanner(System.in);        m = sc.nextInt();        n = sc.nextInt();        num[0] = m;        num[1] = n;        len = getLen(m + n);        dfs(0);        System.out.println(res);    }}
阅读全文
0 0