My first Magazine pemrograman-kompetitif-dasar | Page 112
9 Perkenalan Graf
Contoh 3
Contoh Soal 9.3: Kado Iseng
Sebentar lagi Pak Ganesh berulang tahun. Sebagai teman sepermainan, Pak Dengklek
hendak memberikan kado yang berupa tiket konser musisi kesukaannya. Namun, Pak
Dengklek tidak ingin semata-mata memberikan tiket ini. Ia berencana untuk membungkusnya
dalam kotak, yang akan dimasukkan ke dalam kotak lebih besar, dan dimasukkan lagi ke
kotak yang lebih besar, dan seterusnya.
Di gudang, Pak Dengklek memiliki N kotak yang dapat menampung tiket konsernya, dinomori
dari 1 sampai dengan N. Kotak ke-i memiliki ukuran panjang P i , lebar L i , dan tinggi T i . Suatu
kotak a dapat dimuat ke kotak b apabila dipenuhi P a < P b , L a < L b , dan T a < T b . Untuk alasan
estetika, kotak tidak dapat dirotasi.
Pak Dengklek ingin agar hadiahnya dibungkus oleh kotak sebanyak mungkin. Bantulah Pak
Dengklek menentukan banyaknya lapisan kotak terbesar yang mungkin!
Pada soal ini, tidak terdapat graf yang terlihat secara eksplisit. Namun, kita dapat memo-
delkan hubungan antar kotak sebagai graf. Misalkan setiap kotak merepresentasikan sebuah
node . Apabila kotak a dapat dimuat di kotak b, berarti terdapat edge dari a ke b. Struktur graf
ini akan membentuk sebuah directed acyclic graph.
Untuk penyelesaian masalahnya, kita dapat mulai dengan ide yang sederhana: pilih suatu
kotak, masukkan ke salah satu kotak yang lebih besar, dan ulangi secara rekursif untuk kotak
yang lebih besar. Kompleksitas solusi sederhana ini eksponensial terhadap banyaknya kotak,
dan tidak efisien.
Solusi sederhana sebelumnya dapat dibuat lebih baik dengan prinsip dynamic programming .
Definisikan fungsi d p(a) yang menyatakan banyaknya lapisan kotak maksimum yang dapat dicapai
untuk membungkus kotak a. Untuk mencari d p(a), coba semua kemungkinan kotak b yang dapat
membungkus a (atau dengan kata lain, seluruh tetangga dari a). Pilih yang memberikan nilai d p(b)
terbesar, lalu tambahkan dengan 1 karena banyaknya lapisan bertambah. Base case terjadi ketika
tidak ada kotak yang dapat membungkus a, atau himpunan tetangga dari a berupa himpunan
kosong. Untuk kasus tersebut d p(a) = 0.
(
d p(a) =
0,
ad j(a) = {}
1 + max d p(b), ad j(a) 6 = {}
b∈ad j(a)
Jawaban dari soal ini adalah 1 + d p(x), dengan x merupakan salah satu kotak yang membe-
rikan nilai d p terbesar. Kompleksitas dari solusi ini adalah O(E).
102