ด้านล่างนี้เป็นโปรแกรม python เพื่อค้นหาเงินทั้งหมด นี่คือโซลูชันการเขียนโปรแกรมแบบไดนามิกที่มีลำดับ (n) เวลา เงินคือ 1,5,10,25
เราข้ามจากเงินแถว 1 ไปยังแถวเงิน 25 (4 แถว) เงินแถว 1 มีการนับหากเราพิจารณาเฉพาะเงิน 1 ในการคำนวณจำนวนชุดค่าผสม เงินแถว 5 สร้างแต่ละคอลัมน์โดยการนับในแถวเงิน r สำหรับเงินสุดท้ายเดียวกันบวกกับการนับ 5 ก่อนหน้าในแถวของมันเอง (ตำแหน่งปัจจุบันลบ 5) เงินแถว 10 ใช้เงินแถว 5 ซึ่งมีการนับสำหรับทั้ง 1,5 และเพิ่มในการนับ 10 ก่อนหน้า (ตำแหน่งปัจจุบันลบ 10) เงินแถว 25 ใช้เงินแถว 10 ซึ่งมีจำนวนเงินแถว 1,5,10 บวกกับการนับ 25 ก่อนหน้า
ตัวอย่างเช่นตัวเลข [1] [12] = ตัวเลข [0] [12] + ตัวเลข [1] [7] (7 = 12-5) ซึ่งให้ผลลัพธ์เป็น 3 = 1 + 2; ตัวเลข [3] [12] = ตัวเลข [2] [12] + ตัวเลข [3] [9] (-13 = 12-25) ซึ่งให้ผลลัพธ์เป็น 4 = 0 + 4 เนื่องจาก -13 มีค่าน้อยกว่า 0
def cntMoney(num):
mSz = len(money)
numbers = [[0]*(1+num) for _ in range(mSz)]
for mI in range(mSz): numbers[mI][0] = 1
for mI,m in enumerate(money):
for i in range(1,num+1):
numbers[mI][i] = numbers[mI][i-m] if i >= m else 0
if mI != 0: numbers[mI][i] += numbers[mI-1][i]
print('m,numbers',m,numbers[mI])
return numbers[mSz-1][num]
money = [1,5,10,25]
num = 12
print('money,combinations',num,cntMoney(num))
output:
('m,numbers', 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
('m,numbers', 5, [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3])
('m,numbers', 10, [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 4, 4, 4])
('m,numbers', 25, [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 4, 4, 4])
('money,combinations', 12, 4)