【发布时间】:2012-12-04 21:17:57
【问题描述】:
给定篮球比赛的最终得分,我如何计算导致最终得分的可能得分序列的数量。
每个得分可以是以下之一:3 分、2 分、1 分的客队或主队得分。例如:
basketball(3,0)=4
因为这些是 4 种可能的评分顺序:
V3
V2, V1
V1, V2
V1, V1, V1
并且: 篮球(88,90)=2207953060635688897371828702457752716253346841271355073695508308144982465636968075
我还需要以递归方式执行此操作并且没有任何全局变量(允许使用字典,并且可能是解决此问题的方法) 此外,该函数只能将结果作为参数 (basketball(m,n))。
对于那些寻求解决方案的人:
basketballDic={}
def basketball(n,m):
count=0;
if n==0 and m==0:
return 1;
if (n,m) in basketballDic:
return basketballDic[(n,m)]
if n>=3:
count+= basketball(n-3,m)
if n>=2:
count+= basketball(n-2,m)
if n>=1:
count+= basketball(n-1,m)
if m>=3:
count+= basketball(n,m-3)
if m>=2:
count+= basketball(n,m-2)
if m>=1:
count+= basketball(n,m-1)
basketballDic[(n,m)]=count;
return count;
【问题讨论】:
-
uhhh .. 尝试使用递归从给定的结果(每一个可能的播放 - 1,2,3 点)中减少,直到我达到 0,但为此我需要全局变量,我不能使用一个, ,
-
您能否更清楚地说明
m和n代表什么?我也同意@dusan 的观点,即您应该展示您尝试过的内容,否则这只是一个“给我密码”的问题,可能会被关闭。 -
basketball(1,1)的结果是什么? “A队得1分,B队得1分”与“B队得1分,A队得1分”有区别吗? -
我不确定你在问什么。当您说“播放次数”时,您的意思是指最终得分的播放序列数吗?
-
跟进jimhark的问题:你要枚举
3*x1 + 2*y1 + z1 = N1和3*x2 + 2*y2 + z2 = N2的解,还是像“A队得分2,B队得分1,B队得分2”这样的序列,甚至“A队得分顺序为:2,2,3...,B队得分顺序为:1,2,1...”。这是三个完全不同的问题。
标签: python recursion dictionary memoization