バスケットボールの試合の最終スコアを考えると、最終スコアにつながる可能性のあるスコアリングシーケンスの数をどのように数えることができますか。
各スコアは、訪問チームまたはホームチームのいずれかによる3ポイント、2ポイント、1ポイントのスコアのいずれかになります。例えば:
basketball(3,0)=4
これらは4つの可能なスコアリングシーケンスであるため:
V3
V2, V1
V1, V2
V1, V1, V1
そして:basketball(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;