# your code goes here
mod = 1e9 + 7
# @lru_cache(maxsize=None)
def solve(n,k,target,dp):
if n==0 and target==0:
return 1
if n<0 or target<0:
return 0
if dp[n][target]!=-1:
return dp[n][target]
ans = 0
for i in range(1,k+1):
ans = (ans%mod + solve(n-1,k,target-i,dp)%mod)%mod
dp[n][target]=int(ans)
return dp[n][target]
class Solution:
def method1(self, n: int, k: int, target: int) -> int:
dp = [[-1]*(target+2)]*(n+1)
# dp = [[-1] * (target+2) for _ in range(n+1)]
return solve(n,k,target,dp)
def method2(self, n: int, k: int, target: int) -> int:
# dp = [[-1]*(target+2)]*(n+1)
dp = [[-1] * (target+2) for _ in range(n+1)]
return solve(n,k,target,dp)
obj = Solution()
print(obj.method1(2,6,7))
print(obj.method2(2,6,7))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCgptb2QgPSAxZTkgKyA3CiAgICAKIyBAbHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKZGVmIHNvbHZlKG4sayx0YXJnZXQsZHApOgogICAgaWYgbj09MCBhbmQgdGFyZ2V0PT0wOgogICAgICAgIHJldHVybiAxCiAgICBpZiBuPDAgb3IgdGFyZ2V0PDA6CiAgICAgICAgcmV0dXJuIDAKICAgIGlmIGRwW25dW3RhcmdldF0hPS0xOgogICAgICAgIHJldHVybiBkcFtuXVt0YXJnZXRdCiAgICAKICAgIGFucyA9IDAKICAgIGZvciBpIGluIHJhbmdlKDEsaysxKToKICAgICAgICBhbnMgPSAoYW5zJW1vZCArIHNvbHZlKG4tMSxrLHRhcmdldC1pLGRwKSVtb2QpJW1vZAogICAgCgogICAgZHBbbl1bdGFyZ2V0XT1pbnQoYW5zKQogICAgcmV0dXJuIGRwW25dW3RhcmdldF0KCgpjbGFzcyBTb2x1dGlvbjogIAoKICAgIGRlZiBtZXRob2QxKHNlbGYsIG46IGludCwgazogaW50LCB0YXJnZXQ6IGludCkgLT4gaW50OgogICAgICAgIGRwID0gW1stMV0qKHRhcmdldCsyKV0qKG4rMSkKICAgICAgICAjIGRwID0gW1stMV0gKiAodGFyZ2V0KzIpIGZvciBfIGluIHJhbmdlKG4rMSldCiAgICAgICAgcmV0dXJuIHNvbHZlKG4sayx0YXJnZXQsZHApCiAgICAgICAgCiAgICBkZWYgbWV0aG9kMihzZWxmLCBuOiBpbnQsIGs6IGludCwgdGFyZ2V0OiBpbnQpIC0+IGludDoKICAgICAgICAjIGRwID0gW1stMV0qKHRhcmdldCsyKV0qKG4rMSkKICAgICAgICBkcCA9IFtbLTFdICogKHRhcmdldCsyKSBmb3IgXyBpbiByYW5nZShuKzEpXQogICAgICAgIHJldHVybiBzb2x2ZShuLGssdGFyZ2V0LGRwKQoKb2JqID0gU29sdXRpb24oKQpwcmludChvYmoubWV0aG9kMSgyLDYsNykpCnByaW50KG9iai5tZXRob2QyKDIsNiw3KSk=