Mark sống ở một đất nước nhỏ bé, những người có xu hướng suy nghĩ quá mức. Một ngày nọ, nhà vua của đất nước quyết định thiết kế lại tiền tệ của đất nước để thay đổi hiệu quả hơn. Nhà vua muốn giảm thiểu số lượng tiền dự kiến cần có để trả chính xác bất kỳ số tiền nào lên tới (nhưng không bao gồm) số tiền của hóa đơn giấy nhỏ nhất.
Giả sử rằng đơn vị tiền tệ nhỏ nhất là Coin. Hóa đơn giấy nhỏ nhất trong vương quốc có giá trị Coins. Nhà vua quyết định rằng không nên có nhiều hơn m mệnh giá tiền xu khác nhau đang lưu hành. Sau đó, vấn đề là tìm m -set { d 1 , d 2 , . . . , d m } số nguyên từ { 1 , 2 , . . . , n - 1 } tối thiểu hóa 1tuân theoc1(i)d1+c2(i)d2+. . . cm(i)dm=i.
Ví dụ: lấy USD tiêu chuẩn và các mệnh giá tiền xu của nó là . Ở đây, hóa đơn giấy nhỏ nhất trị giá 100 đồng xu nhỏ nhất. Phải mất 4 xu để kiếm 46 xu bằng cách sử dụng loại tiền này; ta có c 1 ( 46 ) = 1 , c 2 ( 46 ) = 0 , c 3 ( 46 ) = 2 , c 4 ( 46 ) = 1 , c 5 . Tuy nhiên, nếu chúng ta có các mệnh giá tiền xu là { 1 , 15 , 30 } , thì sẽ chỉ mất 3 đồng tiền: c 1 ( 46 ) = 1 , c 2 ( 46 ) = 1 , c 3 ( 46 ) = 1 . Những bộ mệnh giá nào giảm thiểu số lượng tiền trung bình để kiếm bất kỳ số tiền nào lên tới và bao gồm 99 xu?
Tổng quát hơn, với và m , làm thế nào một thuật toán có thể xác định tập hợp tối ưu? Rõ ràng, người ta có thể liệt kê tất cả các m -sets khả thi và tính toán số lượng tiền trung bình cần có để tạo ra các khoản tiền từ 1 đến n - 1 , theo dõi mức tối ưu trên đường đi. Vì có khoảng C ( n - 1 , m ) m -subets (không phải tất cả đều khả thi, nhưng vẫn còn), nên điều này sẽ không hiệu quả khủng khiếp. Bạn có thể làm tốt hơn thế không?