My first Magazine pemrograman-kompetitif-dasar | Page 77
7.1 Konsep Dynamic Programming
menukarkan dengan koin 1, karena kita tidak bisa menggunakan koin 6 atau 10. Sehingga,
f (2) = f (1) + 1, f (3) = f (2) + 1, dan seterusnya. Dengan demikian, nilai tabel akan menjadi
seperti pada Tabel 7.4.
Tabel 7.4: Tahap 4: Isi tabel setelah pengisian f (2) sampai f (5).
x
0 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 0 1 2 3 4 5
Langkah berikutnya adalah mengisi f (6). Kali ini, terdapat pilihan untuk menggunakan koin 1
atau 6 terlebih dahulu, sehingga:
f (6) = min( f (6 − 1) + 1, f (6 − 6) + 1)
= min( f (5) + 1, f (0) + 1)
= min(5 + 1, 0 + 1)
= min(6, 1)
= 1
Memang benar, untuk membayar 6 kita hanya membutuhkan 1 koin. Dengan demikian, nilai
tabel menjadi seperti pada Tabel 7.5.
Tabel 7.5: Tahap 5: Isi tabel setelah pengisian f (6).
x
0 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 0 1 2 3 4 5 1
Lakukan hal serupa untuk x = 7 sampai x = 9. Saat pengisian f (10), terdapat pilihan untuk
menggunakan koin 1, 6, atau 10 terlebih dahulu, sehingga:
f (10) = min( f (10 − 1) + 1, f (10 − 6) + 1, f (10 − 10) + 1)
= min( f (9) + 1, f (4) + 1, f (0) + 1)
= min(4 + 1, 4 + 1, 0 + 1)
= min(5, 5, 1)
= 1
Kembali, dapat dicek bahwa untuk membayar 10 kita hanya membutuhkan 1 koin, yaitu
langsung menggunakan koin 10 (tanpa 1 dan 6). Kita dapat lakukan hal serupa untuk pengisian
f (11) dan f (12) sebagai berikut:
f (11) = min( f (11 − 1) + 1, f (11 − 6) + 1, f (11 − 10) + 1)
= min( f (10) + 1, f (5) + 1, f (1) + 1)
= min(1 + 1, 5 + 1, 1 + 1)
= min(2, 6, 2)
= 2
67