1. Suatu hari, Adit sedang bosan dengan permainan catur yang ia mainkan. Sehingga ia
mencoba membuat permainan lain. Ia akan memindahkan kuda pada papan catur berukuran
8x8 dari ujung kiri bawah papan hingga ujung kanan atas papan. Fyi, pergerakan papan catur
pada kuda digambarkan melalui gambar berikut.
Dengan K adalah lokasi mula – mula tempat kuda diletakkan. Adit pun bertanya – tanya,
berapakah langkah minimal yang diperlukan bidak kuda untuk bergerak dari ujung kiri
bawah papan menuju ujung kanan atas papan catur?
A. 5
B. 6
C. 7
D. 8
E. 10
6
Solusi 6
Cara paling mudah adalah dengan
menyimulasikan pergerakan kuda dari kotak
paling pojok kiri bawah menuju pojok kiri 4
atas. Sehingga nantinya pergerakan kuda
3 5
akan menjadi seperti berikut
1
Deskripsi untuk soal berikut akan digunakan untuk 3 soal berikutnya
Adit memiliki hobi bermain catur. Saking seringnya bermain catur, rating di chess.com-nya
mencapai sekitar 1300 poin. Tetapi, itu menjadi boomerang baginya karena bermain catur
lama – kelamaan membuatnya bosan. Sehingga, ia pun sekarang bermain catur dengan
meletakkan banyak bidak benteng pada papan catur. Pada catur, benteng dapat menyerang
petak – petak berikut.
Dengan B adalah lokasi bidak benteng dan petak biru adalah petak serang benteng.
2. Lalu Adit pun bertanya, apabila ia memiliki papan catur berukuran 2x2, ada berapa
konfigurasi pemasangan 2 benteng pada papan catur agar bidak – bidak itu tidak saling
serang?
A. 1
B. 2
C. 3
D. 4
E. 5
Solusi 2
Hal ini bisa dilakukan dengan mencoba – coba semua kemungkinan. Berikut adalah
kombinasi pemasangan benteng yang valid (dengan kotak kuning adalah lokasi pemasangan
benteng)
3. Apabila ia memiliki papan catur berukuran 4x4, ada berapa konfigurasi pemasangan 4
benteng pada papan catur agar bidak – bidak itu tidak saling serang?
A. 9
B. 16
C. 24
D. 6
E. 32
4. Apabila ia memiliki papan catur berukuran 8x8, ada berapa konfigurasi pemasangan 8
benteng pada papan catur agar bidak – bidak itu tidak saling serang?
A. 900
B. 3280
C. 720
D. 40600
E. 40320
Untuk soal 3 dan 4, tentu akan cukup sulit jika haru mencoba – coba semua kemungkinan
pemasangan benteng. Sehingga kita perlu mencari cara yang lebih mudah dalam memasang
benteng.
Perhatikan pada soal ketiga. Apabila kita ingin memasang benteng pertama kita, maka kita memiliki
4 opsi pemilihan kolom dan baris yang aman dari serangan benteng manapun. Sehingga terdapat 4
kemungkinan pemilihan. Jumlah kolom dan baris aman dari serangan benteng pun berkurang satu.
Kemudian, ketika ingin memasang benteng lagi, kita memiliki 3 opsi pemilihan kolom atau baris yang
aman dari serangan benteng. Sehingga ada 3 opsi pemilihan tempat pada benteng kedua.
Setelah benteng kedua dipasang, sisa opsi pemilihan baris dan kolom hanya ada 2. Sehingga hanya
ada 2 opsi pemilihan baris dan kolom yang valid.
Terakhir, setelah 3 benteng terpasang, benteng terakhir hanya memiliki 1 opsi pemilihan tempat
yang valid. Sehingga solusi akhir kita adalah 4 x 3 x 2 x 1 = 4! = 24
Pada pemasangan pertama ada 4 baris / kolom yang aman dari serangan
benteng
Pada pemasangan kedua, ada 3 baris / kolom yang aman dari serangan
benteng
Pada pemasangan ketiga, ada 2 baris / kolom yang aman dari serangan
benteng
Pada pemasangan keempat, hanya satu baris / kolom saja yang aman dari
serangan benteng.
Sehingga, untuk soal 4, kita bisa menggunakan trik yang sama dengan soal 3. Sehingga solusi akhir
kita adalah 8! = 40320
Permutasi ini dapat menggunakan rumus permutasi biasa. Dalam membuat sebuah kata
dengan 4 huruf berbeda, maka rumusnya adalah 4! = 24
Permutasi ini dapat diselesaikan dengan menggunakan rumus permutasi elemen yang sama.
Untuk membuat kata dengan panjang 5 dan pilihan huruf BEBEK, maka solusinya adalah
5!
= 60
2! 2!
Mengapa dibagi 2! * 2!? Dikarenakan ada 2 huruf B dan 2 huruf E. Perhatikan bahwa kata
B1E1B2E2K dan B2E1B1E2K adalah 2 kata yang sama
Dengan menggunakan solusi yang sama seperti di atas, maka persoalan dapat
diselesaikan dengan solusi
10!
= 302400
3! 2!
Berikut potongan kode untuk 2 soal berikutnya
long long glhf(long long n){
long long glgl = 1;
for(long long i = 1; i <= n; i++){
glgl *= i;
}
return glgl;
}
Jika diperhatikan, ketika diberi bilangan N, fungsi ini akan membuat perulangan dari 1
hingga N. Setelah itu, fungsi akan mengalikan variabel glgl dengan bilangan 1
hingga N dan mengembalikan nilainya. Sehingga dapat disimpulkan bahwa fungsi
glgl(n) mengembalikan nilai dari N!
Perhatikan bahwa dia memulai perulangan dari N menuju 1. Setelah itu, ia membuat
variabel sans sebagai penampung jawaban. Di setiap langkah, ia membolak – balikkan
nilai apatuch menjadi nyala dan mati secara bergantian. Ketika menyala, nilai dari
sans akan kalikan dengan N!. Sementara ketika mati, akan dibagi dengan N!. Selain itu,
nilai dari sans akan menyala apabila N ganjil.
Karena kita mencari nilai dari 72023 mod 100, berarti sama saja dengan kita mencari nilai
puluhan dari 72023
Hal ini dapat dengan mudah kita lakukan apabila kita mencari pola dari perkalian angka 7 ini
71 mod 100 = 7
72 mod 100 = 49
73 mod 100 = 43
74 mod 100 = 1
75 mod 100 = 7
Ternyata, pola dari perpangkatan angka 7 ini akan berulang setiap 4 kali. Sehingga kita hanya
perlu mencari sisa bagi dari 2023 dengan 4.
2023 mod 4 = 3
Dalam membuat bilangan 3 digit, kita memerlukan 3 angka berbeda. Dalam setiap angkanya,
kita memiliki opsi untuk memilih 5 bilangan ganjil berbeda (1, 3, 5, 7, 9). Sehingga, solusi
akhir dari soal ini adalah 5 x 5 x 5 = 125 bilangan
12. Ada berapa bilangan asli kurang dari 1000 yang habis dibagi oleh 5 tetapi tidak habis dibagi
3?
A. 199
B. 133
C. 66
D. 33
E. 120
6
6
5
9
3 7
4
7
10
7
6 11
2 8
4 11
Suatu hari, provinsi miliknya mengalami mati lampu. Untuk itu, ia berinisiatif untuk
menyelamatkan provinsinya. Untuk menyelamatkan satu provinsi, ia harus menghubungkan
tiap kota yang bukan pembangkit listrik ke minimal satu kota pembangkit listrik yang ada
dengan kabel – kabel di provinsi itu. Sekarang ia bertanya, berapakah biaya minimal yang ia
perlukan untuk menyelamatkan Provinsi Pingit?
A. 27
B. 30
C. 34
D. 42
E. 44
Soal ini merupakan salah satu masalah klasik dari Minimum Spanning Tree. Kita dapat
menjalankan algoritma kruskal sebagai berikut.
5
7
10
int awikawok(){
int kurakura = 0, kurikuri = 0;
for(int a = 0; a < 5; a++){
kurakura += (awik[a] * awok[(a + 1) % 5]);
}
for(int a = 0; a < 5; a++){
kurikuri += (awok[a] * awik[(a + 1) % 5]);
}
int res = kurakura - kurikuri;
if(res < 0) res = res * -1;
return res;
}
A. 45
B. 2160
C. 51
D. 60
E. 900
Untuk menjawab soal ini, hanya perlu menjalankan saja program pada soal. Sehingga,
kurakura = (1 x 5 + 4 x 2 + 6 x 1 + 9 x 9 + 10 x 3) = 130
kurikuri = (3 x 4 + 5 x 6 + 2 x 9 + 1 x 10 + 9 x 1) = 79
15. Suatu hari, Alan yang merupakan seorang kurir ingin menghantarkan 12 paket dari toko
menuju ke rumah – rumah warga. Dalam sekali pengantaran, ia bisa menghantarkan 1 atau
3 paket sekaligus. Sekarang, ia bertanya, ada berapa konfigurasi pengiriman paket berbeda
yang mungkin baginya untuk menghantarkan semua paket? Salah satu contoh konfigurasi
pengantaran adalah 3 -> 3 -> 1 -> 1 -> 3 -> 1 dimana ia mula mula menghantarkan 3 paket,
lalu 3 paket, 1 paket, 1 paket, 3 paket, dan mengakhiri pengantaran dengan menghantar 1
paket lagi.
A. 27
B. 30
C. 60
D. 62
E. 15
X 0 1 2 3 4 5 6 7 8 9 10 11 12
DP[x] 1 1 1 2 3 4 6 9 13 19 28 41 60
16. Diberikan sebuah peta yang terdiri dari beberapa kota dan jalan. Mula – mula, Mikail berada
di kota A dan ingin berjalan – jalan secara bebas melalui jalan – jalan yang ada. Dalam satu
langkah, ia bebas pergi dari suatu kota memilih kota mana saja yang menjadi tujuannya
asalkan ia dapat menuju kota itu hanya dengan melewati tepat satu jalan. Sekarang ia
bertanya – tanya, ada berapa konfigurasi kemungkinan pemilihan rute yang dapat digunakan
untuk bergerak dari kota A ke kota D dalam tepat 7 langkah? 45 langkah
D
B
C
A. 23
B. 45
C. 114
D. 15
E. 90
Sehingga, cukup jalankan saja DP-nya hingga kita mendapatkan hasil dari D[7] = 45
17. Aku adalah sebuah bilangan. Jika dibagi 8, maka aku bersisa 5. Jika dibagi 7 aku bersisa 3.
Berapakah aku?
A. 13
B. 18
C. 69
D. 24
E. 51
Diketahui
𝑥 = 5 𝑚𝑜𝑑 8
𝑥 = 3 𝑚𝑜𝑑 7
Kita dapat menggunakan prinsip mencoba – coba solusi.
Kita bisa mencoba – coba bilangan dari 5, 13, 21 dst hingga bilangan yang bersisa 3 apabila
dibagi 7. Kita hanya perlu mencoba bilangan dari 5, kemudian ditambah 8 (13), lalu ditambah
8 lagi (21) dst. Hingga nanti jawaban akhir kita adalah 69.
18. Jika a, b, c, d, e adalah bilangan – bilangan asli (1, 2, 3, ...) dan diketahui pula bahwa a x b x c
x d x e = 780 dan a x b = 20. Ada berapa konfigurasi a, b, c, d, e yang valid?
A. 10
B. 54
C. 24
D. 70
E. 34
20 = 22 . 5
Banyak faktor = 3 . 2 = 6
Ada 6 cara mencari kemungkinan ab -> kita bisa langsung menebak ini dikarenakan ab hanya
terdiri dari 2 angka (a dan b)
Ada berapa cara memasukkan nilai 3 dan 13 ke 3 bilangan berbeda? Ada 6 cara. Hal ini karena
angka 13 punya 3 opsi (sebagai faktor dari c, d, atau e) dan 3 punya 3 opsi (yaitu sebagai faktor
c, d, atau e juga). Sehingga banyak cara adalah 3 x 3 = 9
=6.9
= 54
19. Ada berapa leading zero dari 69! ? 15 angka (trailing zero adalah banyaknya angka 0 yang
ada dibelakang suatu bilangan. Contoh 10 memiliki 1 trailing zero, 1200 memiliki 2 trailing
zero, 4096 tidak memiliki trailing zero
A. 6 angka
B. 10 angka
C. 13 angka
D. 14 angka
E. 15 angka
Perhatikan bahwa banyaknya trailing zero diperngaruhi oleh banyaknya faktor 10 pada 69!.
Selain itum banyaknya faktor 10 dipengaruhi oleh banyaknya faktor 2 dan 5 pada 69!.
Karena banyak faktor 2 pasti lebih banyak dari faktor 5 dari 69!, maka kita cukup fokus ke
faktor 5 saja.
Cara mencari banyak faktor 5 dari 69! adalah dengan membagi 69 dengan 5 saja. Sehingga
didapat 69 / 5 = 13. Namun perhatikan bahwa ada 2 bilangan yang memiliki 2 faktor 5 yaitu
50 dan 25. Sehingga solusi akhir dari masalah ini adalah 13 + 2 = 15
Deskripsi untuk soal berikut akan digunakan untuk 3 soal berikutnya
Dari contoh di atas, apabila ingin membentuk angka 5, ukuran segitiga paskal minimal yang
dibutuhkan adalah 3. Hal ini dikarenakan, dengan segitiga paskal berukuran 3, kita sudah
dapat membentuk angka 5 dengan menjumlahkan 1 + 1 + 1 + 2. Tidak ada segitiga paskal
berukuran lebih kecil dari 3 yang dapat digunakan untuk membuat angka 5
20. Berapakah ukuran segitiga paskal minimal untuk membuat bilangan 100?
A. 5
B. 6
C. 7
D. 8
E. 100
21. Berapakah ukuran segitiga paskal minimal untuk membuat bilangan 2023?
A. 29
B. 2023
C. 43
D. 11
E. 9
22. Berapakah ukuran segitiga paskal minimal untuk membuat bilangan 10.001?
A. 12
B. 13
C. 17
D. 20
E. 10001
Untuk menyelesaikan 3 soal di atas, kita perlu memperhatikan sifat dari segitiga paskal.
Perhatikan bahwa baris ke k pada segitiga paskal memiliki jumlah sama dengan 2k dengan k
dimulai dari 0 seperti pada gambar
1
2
4
8
16
32
Sehingga, hal itu mirip dengan representasi bilangan biner. Sehingga, cara paling mudah untuk
menjawab soal ini adalah dengan mengubah bilangan yang diinginkan menjadi bilangan biner
kemudian mencari bit terbesar dari bilangan itu. Solusi dari masalah ini adalah bit terbesar
dari bilangan itu.
100 => 1100100 -> ukuran segitiga paskal = 7
2023 => 11111100111 -> ukuran segitiga paskal = 11
10.001 => 10011100010001 -> ukuran segitiga paskal = 13
Dijamin bahwa ukuran itu sudah pasti ukuran minimal dari segitiga paskal yang mungkin
23.
int arr[] = {0, 5, 6, 7, 2, 3, 1, 4};
Berapakah hasil dari pemanggilan fungsi wow(1, 1, true) ? (1 -> pake paralel dfs)
A. 1
B. 3
C. 5
D. 7
E. 0
Soal ini dapat diselesaikan dengan menjalankan langsung programnya.
Ingat! Nilai 0 dapat berarti false pada c++, dan nilai 1 dapat berarti true dalam c++
Semisal terdapat kotak yang berisi 8 bola merah, 9 bola biru, dan 10 bola kuning.
24. Berapakah jumlah bola minimal yang perlu diambil dari kotak tersebut sehingga terdapat
minimal 3 bola dengan warna berbeda?
A. 3
B. 8
C. 10
D. 20
E. 27
Soal ini dapat diselesaikan dengan prinsip pigeonhole principle. Kita cukup ambil saja 2 bola
dengan jumlah terbanyak ditambah 1. Sehingga jawaban akhir kita adalah 10 + 9 + 1 = 20.
Dijamin pasti terdapat 3 warna berbeda yang muncul dalam pengambilan 20 bola.
25. Jika dilakukan pengambilan sebanyak 3 kali berturut – turut tanpa pengembalian, maka
berapa peluang terambilnya bola bola biru pada pengambilan pertama dan bola kuning pada
pengambilan kedua dan ketiga.
A. 3 / 65
B. 4 / 65
C. 5 / 65
D. 6 / 65
E. 7 / 65
7
14
3 2 3
3
5
4
3 4 2
2
1 1
4
5 5 1
Pak Dengklek ingin melakukan penyerangan terhadap ibukota Kerajaan Ayam (ditandai warna
hijau). Namun, yang menjadi masalah adalah satu – satunya jalan ke ibukota adalah dengan
melewati jalan – jalan yang ada di kerajaan Ayam tersebut. Yang menjadi masalah lagi, untuk
melewati suatu kota, Pak Dengklek harus berhasil menguasai kota tersebut sebelum akhirnya
mampu untuk melanjutkan perjalanan ke ke kota lain. Selain itu, untuk bergerak melewati
sebuah jalan, Pak Dengklek memerlukan waktu sesuai dengan angka yang tertera pada ruas
jalan di peta. Sekarang, dengan asumsi bahwa waktu yang diperlukan untuk menguasai satu
kota adalah satu hari dan Pak Dengklek memulai penyerangan dari kota yang ditandai warna
merah, berapa lamakah waktu minimal yang diperlukan Pak Dengklek untuk menguasai
ibukota kerajaan Ayam? Note. Pak Dengklek sudah menguasai kota berwarna merah, sehingga
ia tak perlu lagi berperang selama 1 hari di kota itu
A. 19 hari
B. 20 hari
C. 21 hari
D. 16 hari
E. 22 hari
Untuk menguasai satu kota, diperlukan waktu sebanyak waktu untuk berjalan ke kota itu + 1.
Oleh karena itu, graf di atas ekuivalen dengan graf berikut
8
15
4 3 4
4
6
5
4 5 3
3
2 2
5
6 6 2
Dengan graf yang berubah menjadi seperti itu, kita tidak perlu lagi memperhatikan waktu
untuk menguasai satu kota. Dengan begitu, kita cukup menggunakan algoritma Dijkstra
untuk menyelesaikan soal ini. Berikut adalah graf hasil algoritma Dijkstra. Bilangan pada tiap
node menunjukkan waktu minimal untuk menguasai satu kota.
21
7 14
3 11
17
14
19
6 14
12
Dari kedua opsi pencuri, maka yang memenuhi jawaban pada pertanyaan adalah D. Kwak dan
Kwok
28. Diketahui pernyataan berikut
S = (P and Q) or (not P and (Q or R))
Untuk soal ini, kita bisa memisahkan persamaan menjadi seperti ini
Pers 1 = (P and Q)
Pada persamaan ini, jika Q atau P bernilai false, maka hasilnya false
Pada persamaan ini, jika P bernilai true atau Q dan R bernilai false, maka hasilnya false
Karena kedua persamaan itu dihubungkan dengan or, maka cukup cari konfigurasi yang
menghasilkan false pada kedua persamaan itu. Konfigurasi yang valid adalah E
4080 = 24 . 3 . 5 . 17
Untuk mencari banyak faktor, kita cukup gunakan nilai nilai pangkat dari faktorisasi prima itu,
menambahkan 1 pada setiap pangkatnya, dan mengalikannya
5 .2 .2 .2 -> ditambah 1
5 . 2 . 2 . 2 = 40 -> dikalikan
2096 = 24 .131
Kemudian, jumlah faktor dari 2096 dapat dicari dengan
int arr[] = {0, 3, 5, 9, 10, 11, 24, 26, 68, 69, 100, 123, 240};
33. Ada berapa cara mempermutasikan string “BEBEKMAAMWOWOK” menjadi sebuah string
palindrome? Note: string palindrome adalah string yang apabila dibaca dari kiri ke kanan atau
dari kanan ke kiri. Contoh “kasurrusak” adalah palindrom karena apabila dibalik maka menjadi
“kasurrusak.” Sementara “kursi” bukanlah palindrom karena apabila dibalik maka menjadi
“isruk”.
A. 681080400
B. 87178291200
C. 3700
D. 6245800
E. 5040
String palindrom adalah string yang apabila dibaca dari belakang atau depan sama saja.
Cara paling sederhana dari menyelesaikan masalah ini adalah mencari semua permutasi
string kemudian memeriksanya satu persatu string mana saja yang palindrom. Namun hal
ini tentu sulit dikarenakan akan ada sangat banyak kemungkinan string. Oleh karena itu
kita akan sederhanakan masalahnya.
Dalam membuat string palindrom yang memiliki panjang 12, sebenarnya kita cukup
membuat string sembarang dengan panjang 6 saja (6 adalah setengah dari 12) kemudian
cukup membuat kebalikan dari string itu dan memasangkannya.
34. Bu Astri merupakan seorang guru di suatu sekolah. Ia memiliki 6 murid yang bernama Kwok,
Kwik, Kwuk, Kwek, Kwak, dan Kwuouk. Keenam murid ini memiliki tempat duduk kesayangan
di kelasnya. Ketika duduk, mereka selalu membentuk barisan horizontal dari kiri ke kanan
dengan konfigurasi Kwok, Kwik, Kwuk, Kwek, Kwak, dan Kwuouk. Namun, karena mereka
semua duduk pada kursi kesayangannya masing – masing, pelajaran di kelas menjadi kurang
kondusif lantaran mereka yang selalu berisik ketika Bu Astri sedang menjelaskan pelajaran.
Untuk itu, Bu Astri ingin mengacak tempat duduk keenam muridnya sehingga mereka semua
tidak ada yang duduk di kursi kesayangannya masing – masing demi terciptanya pelajaran
yang kondusif. Kemudian Bu Astri pun bertanya, ada berapa konfigurasi tempat duduk yang
mungkin bagi keenam murid tersebut sehingga tidak ada dari mereka yang duduk di kursi
kesayangannya masing – masing? Salah satu contoh konfigurasi yang valid adalah (dari kiri ke
kanan) Kwik Kwok, Kwek, Kwuk, Kwuouk, Kwak.
A. 720 cara
B. 120 cara
C. 265 cara
D. 719 cara
E. 500 cara
Pada soal ditanyakan bagaimana cara mengacak tempat duduk 6 murid. Ini merupakan salah
satu contoh masalah klasik dari DP dearranggement
Definisikan DP[x] adalah banyak cara mengacak x murid sehingga tidak ada yang berada di
posisi yang sama dengan posisi semula
DP[1] = 0. Hal ini dikarenakan tidak ada cara untuk mengacak 1 murid agar pindah dari
tempat duduknya
DP[2] = 1. Hal ini dikarenakan untuk mengacak 2 murid (misal AB). Maka hanya ada 1
cara untuk mengacak mereka yaitu BA.
Semisal kita ingin memasukkan murid baru x ke dalam deretan kursi. Kita tidak
diperbolehkan untuk meletakkan x ke kursi x. Dikarenakan hal itu tidak memenuhi kondisi
pengacakan. Kita memiliki (x - 1) opsi kursi yaitu dari kursi 1 hingga x – 1 untuk meletakkan x.
Semisal kita memilih kursi i (i <= x). Ada 2 kemungkinan yang terjadi dari orang yang
berada di kursi i tersebut:
DP 1 2 3 4 5 6
Nilai 0 1 2 9 44 265
35. Suatu hari Ereh ingin membuat pedang berbentuk persegi Panjang dengan ujung meruncing
ke atas yang memiliki panjang 7 seperti gambar berikut
1
7
6
Untuk membuat pedang itu, Ereh akan menggabungkan beberapa pedang yang berukuran
lebih kecil dan menyusunnya menjadi 1 pedang besar yang diinginkan. Berikut adalah
potongan pedang pedang kecil dengan ukurannya yang dimiliki Ereh dalam jumlah tak
terbatas
2 1 1
Pedang – pedang itu akan disusun menjadi pedang yang lebih besar. Berikut adalah salah
satu cara penyusunan pedang berukuran 7 yang bisa dilakukan dengan menyusun pedang – pedang
kecil itu
Sehingga total panjang pedang yang terbentuk adalah 7. Sekarang Ereh pun bertanya, ada berapa
konfigurasi pembentukan pedang ujung meruncing ke atas dengan ukuran 7 dengan
menggabungkan potongan pedang pedang kecil itu yang valid?
A. 17 cara
B. 16384 cara
C. 512 cara
D. 4096 cara
E. 1024 cara
Definisikan f[x] adalah banyak cara membuat pedang berujung runcing dengan
X panjang x
X Definiskan g[x] adalah banyak cara membuat pedang berujung vertikal dengan
panjang x
Untuk F[x]
Terakhir, kita bisa menambahkan pedang ungu pada pedang ujung runcing berukuran x – 1.
Sehingga F[x] ditambahkan dengan nilai F[x - 1]
Sehingga F[x] = F[x - 1] + G[x - 1] + F[x - 1] = 2F[x - 1] + G[x - 1]
Lalu untuk G[x], kita bisa membuat G[x] dengan dua cara. Yaitu menambahkan pedang hijau
pada pedang ujung runcing panjang x seperti ini
= 2F[x - 1] + 2F[x - 1]
= 4F[x - 1]
Sementara untuk basis, F[1] = 1 karena hanya ada satu cara membuat pedang ujung
meruncing ke atas dengan panjang 1 yaitu adalah dengan satu pedang hijau. Lalu isi saja DP-
nya dengan tabel berikut
DP 1 2 3 4 5 6 7
Nilai 1 4 16 64 256 1024 4096
36. Kwak dan Kwik adalah rival abadi dalam permainan catur. Mereka berdua adalah pecatur
hebat yang saking seimbangnya kemampuan mereka, permainan catur mereka selalu berakhir
seri. Untuk itulah, mereka ingin menentukan siapa diantara mereka yang paling hebat dengan
mengadu diri di sebuah permainan baru. Mula – mula mereka menggambar beberapa titik
yang dihubungkan dengan garis seperti pada gambar.
3
6 11
2
=
=
5
9 4
8 =
=
4 =
1 = =
7 10
12
=
=
=
Masing – masing dari mereka akan meletakkan pion mereka di 2 buah titik berbeda.
Kemudian secara bergantian, mereka akan menggerakkan pion – pion itu ke titik – titik yang
terhubung langsung dengan pion itu. Dalam satu langkah, pion pemain yang mendapat giliran
tidak boleh menempati titik yang sedang ditempati pemain lain. Pemain yang pertama kali
kehabisan tempat atau tidak bisa bergerak akan kalah. Kedua pemain akan bermain secara
optimal untuk memenangkan permainan. Apabila Kwak adalah pemain pertama yang
mendapat kesempatan untuk memilih titik pertama tempat pionnya diletakkan, titik manakah
yang dapat membuat Kwak selalu menang melawan Kwik dimanapun Kwik meletakkan pion
pertamanya?
A. Titik 2
B. Titik 9
C. Titik 6
D. Permainan tak akan selesai
E. Tidak ada (kwik selalu menang)
Solusi
Kwik selalu menang.
Mengapa begitu? Dikarenakan dimanapaun kwak memilih tempat mulai, langkah paling
optimal bagi kwik adalah memilih tempat yang tepat bersebelahan dengan posisi kwak.
Dengan begitu, kwak akan terpaksa harus “mundur” dan kwik pun dapat bergerak ke posisi
kwak sebelumnya. Dengan begitu pasti kwak akan terdesak dan kalah.
37. Suatu ketika, wabah virus etanaisa sedang menyerang warga kota Dengkleksia. Sebagai dokter
sekaligus ilmuwan terhebat di kota itu, Pak Dengklek pun segera mencari cara untuk
mengatasi wabah tersebut. Setelah meneliti dalam waktu 2 hari, ia pun berhasil menemukan
bakteri baik yang dapat digunakan sebagai bahan obat penawar wabah tersebut. Yang
menjadi masalah, 1 bakteri kecil hanya bisa dipakai untuk mengobati satu orang penduduk
saja. Selain itu, bakteri – bakteri ini diketahui dapat menghasilkan 2 anakan baru setelah hidup
selama lebih dari sama dengan 2 hari. Yang menjadi masalah, setelah hidup selama 3 hari
bakteri itu akan mati begitu saja dan tidak menghasilkan keturunan. Terakhir, karena proses
membuat obat dari bakteri ini sangat sulit, maka Pak Dengklek hanya ingin mengolah semua
obat yang dibutuhkan untuk mengobati satu kota jika dan hanya jika jumlah bakteri sudah
memenuhi jumlah penduduk dalam waktu satu hari. Jika diketahui jumlah penduduk yang
terserang penyakit adalah 120 orang dan Pak Dengklek memulai pengembangbiakan bakteri
pada hari ke 0, berapakah jumlah bakteri minimal yang dibutuhkan sehingga Pak Dengklek
dapat mengobati seluruh penduduk setidaknya pada hari ke 7 pengembangbiakan bakteri?
A. 3 bakteri
B. 4 bakteri
C. 6 bakteri
D. 7 bakteri
E. 10 bakteri
Kita dapat menyelesaikan masalah ini dengan dynamic programming. Untuk memDefinisikan
DP[x] sebagai banyak bakteri pada hari ke x. Untuk basisnya, agar mempermudah kita anggap
bahwa mula – mula kita hanya menggunakan 1 bakteri saja, sehingga DP[0] = 1.
Kemudian untuk transisinya, Mula – mula kita anggap bahwa banyak bakteri hari ke x sama
dengan bakteri di hari ke x – 1, maka DP[x] = DP[x - 1]. Lalu dikarenakan setiap bakteri mulai
mampu berkembang biak saat hari kedua dia hidup, maka DP[x] akan ditambah DP[x - 2] untuk
x >= 2. Terakhir, karena setiap bakteri yang berumur lebih dari 3 hari akan mati, maka DP[x]
akan dikurangi oleh DP[x - 3] untuk x >= 3.
Sehingga, secara formal:
DP[x] = 0 untuk x < 0
DP[x] = 1 untuk x = 0
DP[x] = DP[x - 1] + DP[x - 2] – DP[x - 3] untuk x >= 3
Dan nilai yang kita cari adalah DP[7]. Maka kita buat saja tabelnya hingga DP[7] dan jadilah
seperti ini
1 1 2 3 6 10 19 33
Terlihat bahwa DP[7] = 33. Maka, untuk mencari bakteri minimal agar DP[7] >= 120, maka kita
cukup cari saja nilai dari
120
⌈ ⌉=4
33
Maka bakteri yang kita butuhkan minimal di awal adalah 4. Mengapa bisa begitu? Karena jika
kita mengalikan nilai DP[0] dengan 4, maka pasti nilai nilai dari DP[x] dimana x >= 1 akan terkali
dengan 4 juga. Sehingga DP[7] menjadi 33 * 4 = 132 dimana 132 > 120
38. Diketahui Asep, Budi, Caci, dan Deni ingin menyeberangi sebuah jembatan. Namun karena
jembatan itu sempit, jembatan itu hanya mampu dilewati dengan syarat sebagai berikut
A. Dalam satu waktu, jembatan hanya boleh dilewati maksimal 2 orang.
B. Masalah kedua, karena hari sudah malam maka orang atau sepasang orang yang melewati
jembatan itu harus membawa penerangan.
C. Masalah ketiga, mereka semua hanya membawa satu penerangan sehingga mereka harus
berganti – gantian dalam menggunakan penerangan itu ketika ingin melewati jembatan.
D. Waktu yang diperlukan bagi Asep, Budi, Caci, dan Deni dalam melewati jembatan secara
berurutan adalah 2 menit, 3 menit, 12 menit, dan 10 menit. Jika ada dua orang yang
secara bersamaan melewati jembatan, maka waktu yang dibutuhkan oleh kedua orang itu
untuk melewati jembatan sama dengan maksimal dari waktu salah satu dua orang
tersebut.
Sebagai contoh, semisal Caci dan Asep melewati jembatan bersamaan, maka mereka
memerlukan waktu 12 menit (maksimal dari 2 dan 12) untuk melewati jembatan.
Sementara jika Deni dan Budi melewati jembatan bersama sama, maka waktu yang
diperlukan adalah 10 menit
Pertanyaannya, berapakah waktu minimal yang diperlukan agar keempat orang itu bisa
melewati jembatan tanpa masalah?
A. 27 menit
B. 25 menit
C. 23 menit
D. 21 menit
E. 19 menit
Cara paling optimal dari menyelesaikan masalah ini adalah mengelompokkan orang yang
tercepat menjadi satu kelompok dan orang lambat menjadi satu kelompok. Sehingga,
begini simulasinya
1. Mula – mula Asep dan Budi menyeberang jembatan sambil membawa penerangan.
Total waktu 3 menit.
2. Lalu, Asep kembali kepada 2 teman lainnya yang ada di seberang jembatan sambil
membawa penerangan. Total waktu 2 menit
3. Kemudian, Caci dan Deni menyeberang jembatan. Total waktu 12 menit.
4. Lalu Budi membawa penerangan yang dibawa Caci dan Deni untuk menjemput Asep
di seberang jembatan. Total waktu 3 menit
5. Terakhir, Asep dan Budi menyeberang jembatan. Total waktu 3 menit
39. Dalam suatu balapan, yang diikuti oleh A, B, C, D, E diketahui beberapa fakta berikut.
A. A sampai finish lebih dahulu ketimbang B dan C
B. B sampai di finish sesudah D
C. E sampai di finish setelah A dan sebelum D
A. A
B. B
C. C
D. D
E. E
Kita dapat menyelesaikan masalah ini dengan mencoba – coba tiap pernyataan.
Mula – mula, A sampai finish lebih dahulu ketimbang B dan C. Letakkan A di depan B dan
C
A B
B
C
Bfinish sesudah D. Letakkan D di depan B dan C
Lalu, B sampai di
A D B
B
C
B setelah A dan sebelum D. Maka kita letakkan E di antara A
Kemudian, E sampai di finish
dan D
A E D B
B
C
B
Maka, A sampai di finish terlebih dahulu
40. Inand memiliki hobi yang aneh. Ia suka sekali menumpuk piring – piring yang ada di mejanya.
Di mejanya terdapat beberapa piring. Piring – piring itu tersusun dengan rapi dari kiri ke kanan.
Dalam menumpuk piringnya, ia memiliki aturan khusus. Ia akan mulai mengambil piring
dimulai dari piring terkiri hingga terkanan yang ada di meja. Dalam membuat tumpukan, ia
bisa memulai tumpukan piring baru di mejanya, atau dengan menumpuk piring yang sedang
ia bawa sekarang ke tumpukan piring yang sudah ada sebelumnya. Namun, ia hanya akan
menumpuk piring ke tumpukan piring lainnya jika dan hanya jika piring yang ia bawa sekarang
memiliki ukuran lebih kecil atau sama dengan dari piring teratas di tumpukan piring yang
sudah ada.
Sebagai contoh, apabila konfigurasi ukuran piring dari yang kiri ke kanan di meja Inand
adalah 5 2 4 1 3, salah satu konfigurasi penumpukan piring yang mungkin ada pada gambar
1
5 2 4 3
a. Mula mula ia mengambil piring pertama dengan ukuran 5 dan membuat tumpukan baru
b. Kemudian ia mengambil piring kedua dengan ukuran 2 dan membuat tumpukan baru
c. Ia mengambil piring ketiga dengan ukuran 4 dan membuat tumpukan baru
d. Setelah itu ia mengambil piring keempat dengan ukuran 1 dan menumpukknya di atas
tumpukan 3
e. Kemudian ia mengambil piring dengan ukuran 3 dan membuat tumpukan baru, sehingga
banyak tumpukan adalah 4
Apabila konfigurasi ukuran piring dari kiri hingga kanan meja adalah 9 2 7 1 2 9 17 23 6 11,
berapakah banyak tumpukan minimal yang bisa dibentuk?
A. 10
B. 8
C. 7
D. 5
E. 3
Kita dapat melakukan greedy untuk soal ini. Greedy-nya adalah setiap kali kita memiliki satu
piring dan pirint itu dapat diletakkan di atas piring lainnya, maka letakkan piring itu di atas
piring terkecil yang lebih besar dari piring itu. Sehingga konfigurasi paling optimal adalah
sebagai berikut
2 2 6 11
9 7 9 17 23