My first Magazine pemrograman-kompetitif-dasar | Page 72
7
Dynamic Programming
Dynamic programming (DP) sejatinya adalah brute force yang dioptimasi. Seperti greedy ,
persoalan yang dapat diselesaikan dengan DP jika persoalan tersebut memiliki subpersoalan.
Perbedaannya, DP tidak melakukan greedy choice , melainkan mencoba seluruh kemungkinan yang
ada. DP ini sendiri merupakan topik yang sangat luas dan memerlukan latihan yang mendalam
agar dapat menguasai topik ini.
7.1
Konsep Dynamic Programming
DP merupakan metode penyelesaian persoalan yang melibatkan pengambilan keputusan
dengan memanfaatkan informasi dari penyelesaian subpersoalan yang sama namun lebih kecil.
Solusi subpersoalan tersebut hanya dihitung satu kali dan disimpan di memori. Sama seperti
greedy , solusi DP dapat bekerja hanya jika solusi optimal dari persoalan dapat ditentukan dari
solusi optimal subpersoalan tersebut.
Terdapat dua cara mengimplementasikan DP:
• Top-down : diimplementasikan secara rekursif sambil mencatat nilai yang sudah ditemukan
(memoisasi).
• Bottom-up : diimplementasikan secara iteratif dengan menghitung mulai dari kasus yang
kecil ke besar.
DP.
Kita akan menggunakan contoh soal Coin Change berikut sebagai sarana mempelajari teknik
Contoh Soal 7.1: Coin Change
Diberikan M jenis koin, masing-masing jenis bernilai a 1 , a 2 , ..., a M rupiah. Asumsikan banyak-
nya koin untuk setiap nominal yang ada tak terbatas. Tentukan banyaknya koin paling sedikit
untuk membayar tepat sebesar N rupiah!
Contoh soal tersebut sudah dibahas pada bab sebelumnya dan dapat dibuktikan bahwa
soal tersebut tidak dapat diselesaikan dengan greedy . Mari kita selesaikan soal tersebut
menggunakan DP.
7.1.1 Top-down
Pendekatan top-down biasa juga disebut memoisasi. Kata memoisasi berasal dari "memo",
yang artinya catatan. Pada top-down , penyelesaian masalah dimulai dari kasus yang besar.
Untuk menyelesaikan kasus yang besar, dibutuhkan solusi dari kasus yang lebih kecil. Karena
62