题目描述
解题思路
深度遍历探索所有的可能性先从第一个颜色在第一个只有一个颜色开始。。依次寻找。具体看代码注释。对于依次递增就只好判断每次换色后是否比前一个颜色多,依次类推。
代码
def dfs(n,t,c):
'''
:param n:表示小球总数
:param t:表示上个统计的球数
:param c:表示上个统计的颜色
:return:
'''
global s#全局化方法数
#如果小球被排列完,则返回方法数
if n==0:
s+=1
return
else:
#i记录下一个小球的颜色,换另一种颜色排列
for i in range(3):
#颜色相同或剩余球数不够,不足以满足严格单调递增,继续换色
if i==c or l[i]<t+1:
continue
#与上次排列颜色不同且剩余球数足够继续排列
else:
#j记录下一组连续同色小球的个数,至少比上一组(t个)多一个,至多剩余的全部放上
for j in range(t+1,l[i]+1):
#剩余i色小球数量
l[i]-=j
#继续排列,总共剩余n-j个小球,本次有连续同色小球为j个,颜色为i
dfs(n-j,j,i)
#不妨将此中的j记为j1
#上面的dfs只是一种排列可能
#排列完后还要看是否有j2,j3
#j寻找完后换色继续
l[i]+=j
#s统计方法数
s=0
#l[0]表示R的个数,l[1]表示G的个数,l[2]表示B的个数
l=[int(i) for i in input().split()]
#小球总个数
n=sum(l)
dfs(n,0,-1)
print(s)