字节跳动2018.9.20第四题

本文探讨了使用动态规划算法解决n个红球、m个蓝球和k个黄球在确保相同颜色的球不相邻的情况下,计算所有可能排列组合的方法数。通过详细的代码解析,展示了如何构建状态转移矩阵并最终求得解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

n个红球,m个篮球,k个黄球,相同颜色的不相邻,多少种方法

动态规划,还行

```

num=raw_input().split(" ")
n,m,k=int(num[0]),int(num[1]),int(num[2])

result=[]
for i in range(n+1):
    tem0=[]
    for j in range(m+1):
        tem1=[]
        for p in range(k+1):
            tem2=[]
            for q in range(3):
                tem2.append(0)
            tem1.append(tem2)
        tem0.append(tem1)
    result.append(tem0)

result[1][0][0][0]=1
result[0][1][0][1]=1
result[0][0][1][2]=1
result[1][1][0][0]=1
result[1][1][0][1]=1
result[1][0][1][2]=1
result[1][0][1][0]=1
result[0][1][1][1]=1
result[0][1][1][2]=1

result[1][1][1][0]=2
result[1][1][1][1]=2
result[1][1][1][2]=2

for i in range(0,n+1):
    for j in range(0,m+1):
        for p in range(0,k+1):
            if result[i][j][p][0]==0:
                result[i][j][p][0]+=result[i-1][j][p][1]+result[i-1][j][p][2]
            if result[i][j][p][1]==0:
                result[i][j][p][1]+=result[i][j-1][p][0]+result[i][j-1][p][2]
            if result[i][j][p][2]==0:
                result[i][j][p][2]+=result[i][j][p-1][1]+result[i][j][p-1][0]

print result[n][m][k][0]+result[n][m][k][1]+result[n][m][k][2]

```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值