Daulat Ramは豊富なビジネスマンです。 demonetizationの後、彼のすべてのお金が押収された彼の宿泊施設でIT襲撃が開催されました。彼は彼のお金を取り戻すことを非常に熱望しています。彼は特定のベンチャーに投資し、彼らから儲け始めました。最初の日、彼の収入はRsでした。 X、続いてRs。 2日目のY。 Daulat Ramは彼の成長を関数として観察し、N日目に収入を計算したかった。彼が見つけたこのコードを最適化するために動的プログラミングを使用する方法
機能は、FN = FN-1 + FN-2 + FN-1×FN-2
は0日と1日目に彼の収入を与えられた、ええ(N番目の日に彼の収入を計算しますそれは簡単です)。
INPUT:
入力の最初の行は、テストケースの数を表す単一の整数Tから成ります。
次のT行は、それぞれ3つの整数F0、F1、Nで構成されています。
OUTPUT:
各テストケースについては、単一の整数FNを印刷出力を大きくすることができるように、回答モジュロ109 + 7を算出します。
制約:
1≤T≤105
0≤F0、F1、N≤109
def function(x1):
if x1==2: return fnc__1+fnc__0*fnc__1+fnc__0
elif x1==1: return fnc__1
elif x1==0: return fnc__0
return function(x1-1)+function(x1-2)*function(x1-1)+function(x1-2)
for i in range(int(input())): #input() is the no of test cases
rwINput = input().split()
fnc__0 =int(rwINput[0])
fnc__1 = int(rwINput[1])
print(function(int(rwINput[2])))
@hiroprotagonist:実際にはmemoizationは簡単な(安価な)動的プログラミングの形式になります。 –
@WillemVanOnsem:ああ、そうです。明確化のおかげで! –