Q09落单的男女1

E:/GitHub/suanfaquti/Q09落单的男女1.py
'''
问题描述(有少量修改)
3男(1)3女(0)组成一队,如果从任何地方切成两队,这两队的男女人数都不等,
则称为不均等队。如110100是不均等队,110001是均等队(切成1100和01即可)。
不考虑人的不同,即1101和1101是一队,不考虑(m1m2w1m3)这样的情况。
现在有20男10女,求可以组成的不均等队的数量。

分析
20男10女组成21*11的二维棋盘(0->20,0->10),起点(0,0)表示当前0男0女,
终点(20,10)表示20男10女,只能往右/上走,不能走出棋盘,
不能走到res上(res是坐标的集合,走到里面的点意味着是均等队),
那么走到(20,10)就必须先走到(19,10)或者(20,9),可使用递归
'''

m,w=20,10

k=min(m,w)  #棋盘宽度

res=set()
for i in range(1,k+1):
    res.add((i,i))           
    res.add((m-i,w-i))

if (0,0) in res:
    res.remove((0,0))
if (m,w) in res:
    res.remove((m,w))
    
print(res)

def f(x,y):
    if (x,y)==(0,0):
        return 1
    if x<0 or y<0 or (x,y) in res:
        return 0
    return f(x-1,y)+f(x,y-1)

print(f(m,w))           #2417416
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值