机器人编程java面试题,7届国赛java试题 4: 机器人塔

机器人塔(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

例如:

用户输入:

1 2

程序应该输出:

3

再例如:

用户输入:

3 3

程序应该输出:

4

思路:

我们输入的A,B的值先确定塔的层数,因为题目说了保证人数的合理性,无论A,B给多少人,能堆出来的塔的层数一定是唯一确定的。我们先从最后一层开始把最后一层的所有可能遍历出来,然后在用递推的方式一层一层的递归。c[r+1][l]==c[r+1][l+1]这个是当下面的字母相等时当前的这个位置一定为a,反之就是b。

程序:

a=list(map(int,input().split()))

s=sum(a)

ab=[1,2]

for i in range(2,1000):

if s==((i+1)*i)//2:

o=i

break

try:

c=[[0 for i1 in range(o+1)]for i in range(o+1)]

con=0

def ck(i,r,l):

if a[i]-1>=0:

c[r][l]=ab[i]

a[i]-=1

if l>=r:

dfs(r-1,0)

else:

dfs(r,l+1)

c[r][l]=0

a[i]+=1

def dfs(r,l):

global con

if r==-1:

con+=1

return

elif r==o-1:

for i in range(2):

ck(i,r,l)

elif c[r+1][l]==c[r+1][l+1]:

ck(0,r,l)

elif c[r+1][l]!=c[r+1][l+1]:

ck(1,r,l)

dfs(o-1,0)

print(con)

except:

print(0)

禁止转载。仅用于自己学习。对程序错误不负责。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值