Tôi đã xem xét một số vấn đề lập trình động và tôi đã gặp khó khăn trong việc tìm kiếm số tiền nhỏ nhất để thay đổi.Thay đổi đồng tiền tối ưu hóa lập trình động
Giả sử chúng ta có đồng xu trị giá 25, 10 và 1 và chúng tôi đang thực hiện thay đổi cho 30. Tham lam sẽ trả về 25 và 5 (1) trong khi giải pháp tối ưu sẽ trả về 3 (10). Đây là mã từ cuốn sách về vấn đề này:
def dpMakeChange(coinValueList,change,minCoins):
for cents in range(change+1):
coinCount = cents
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
minCoins[cents] = coinCount
return minCoins[change]
Nếu ai đó có thể giúp tôi quấn quanh mã này (dòng 4 là nơi tôi bắt đầu nhầm lẫn), điều đó thật tuyệt. Cảm ơn!
'minCoins' là gì? Dù sao, cố gắng để giải quyết điều này nói chung là tương đương với vấn đề ba lô (hoặc thậm chí có thể tồi tệ hơn), vì vậy việc tìm kiếm giải pháp tối ưu trong mọi trường hợp trở nên rắc rối thực sự nhanh chóng. Giải pháp có thể phụ thuộc vào đồng tiền bạn có thể sử dụng. – Bakuriu
Viết 'cho biến trong [l cho l trong list_comprehension] 'là chủ quan xấu, chỉ vì tôi đã không nhìn thấy nó nhiều ... – Droogans
Nó vụng về, nhưng không thực sự quá khủng khiếp. Nó chỉ thu hẹp danh sách xuống. Điều tương tự có thể đã được thực hiện với một 'if' và 'tiếp tục' trên dòng tiếp theo, nhưng whatevs. – acjay