Mô tả bài toán
Cho danh sách các đồng xu coins và giá trị amount. Đếm số tổ hợp (thứ tự không quan trọng) có tổng bằng amount. Kết quả lấy modulo 10^9+7.
Ví dụ: coins = [2, 5], amount = 10 → đầu ra 2 (tổ hợp: 5 đồng 2, hoặc 2 đồng 5).
Giải thuật (Quy hoạch động - Coin Change 2)
m = 10**9 + 7.- Khởi tạo mảng
dpkích thướcamount+1toàn 0,dp[0] = 1. - Với mỗi đồng xu
d:- Với
itừ 1 đếnamount: nếui >= dthìdp[i] = (dp[i] + dp[i-d]) % m.
- Với
- Trả về
dp[amount].
Ví dụ mã Python
class Solution:
def solve(self, coins, amount):
dp = [0] * (amount + 1)
dp[0] = 1
for d in coins:
for i in range(1, len(dp)):
if i - d >= 0:
dp[i] += dp[i - d]
return dp[-1] % (10 ** 9 + 7)
ob = Solution()
coins = [2, 5]
amount = 10
print(ob.solve(coins, amount))
Đầu vào
[2, 5], 10
Đầu ra
2