choose = [1, 2]
dp = [0] * (n + 1)
dp[0] = 1
for i in range(len(dp)):
for j in choose:
if i < j: break
dp[i] += dp[i-j]
return dp[-1]
LeetCode.332 零钱兑换
dp = [float("inf")] * (amount+1)
dp[0] = 0
for i in range(len(dp)):
for j in coins:
if i < j: continue
dp[i] = min(dp[i], dp[i-j]+1)
return -1 if dp[-1] == float("inf") else dp[-1]
LeetCode. 279 完全平方数
nums = [i*i for i in range(1, int(math.sqrt(n) + 1))]
dp = [float("inf")] * (n+1)
dp[0] = 0
for i in nums:
for j in range(i, len(dp)):
dp[j] = min(dp[j], dp[j-i]+1)
return dp[-1]