Sebagai pendekar, Pak Dengklek dan Pak Ganesh tidak boleh sakit. Supaya sehat, keduanya harus minum air putih 2 liter per hari. Pak Ganesh memiliki 3 buah gelas : satu berukuran 200 ml, satu berukuran 300 ml, and satunya lagi berukuran 500 ml. Berapa banyak urutan minum Pak Ganesh dengan 3 buah gelas tersebut (tidak perlu dipakai semua) apabila ia ingin minum air putih tepat 2 liter? Urutan minum 200-200-200-200-200-500- 500 dan 500-500-200-200-200-200-200 dianggap berbeda.
Sebenarnya nomor 24 dan 25 itu mirip dengan coin change problem yang bisa kita selesaikan dengan pendekatan dynamic programming. Dengan menggunakan pendekatan ini, kita bisa menyelesaikan kasus serupa dengan cepat dan benar asalkan teliti menghitungnya. Terkadang kalau kita harus membagi kasus terlebih dahulu, akan memakan waktu lama dan rawan tidak teliti.
Misal, f(n) = banyak urutan minum Pak Ganesh untuk n*100 ml. Kasus dasarnya f(0) = 1, yaitu tidak meminum apa-apa. Untuk suatu f(n), jika terakhirnya Pak Ganesh meminum dari gelas 200 ml maka banyaknya kemungkinan adalah f(n-2). Jika terakhirnya meminum dari gelas 300 ml banyaknya kemungkinan adalah f(n-3). Jika terakhirnya meminum dari gelas 500 ml banyaknya kemungkinan adalah f(n-5). Maka, f(n) = f(n-2) + f(n-3) + f(n-5). Tentu jika n < 0, maka banyaknya kemungkinan adalah 0.
Untuk mempermudah, kita dapat menghitung nilai f(20) secara bottom up.
| f(0) | f(1) | f(2) | f(3) | f(4) | f(5) | f(6) | f(7) | f(8) | f(9) | f(10) | f(11) | f(12) | f(13) | f(14) | f(15) | f(16) | f(17) | f(18) | f(19) | f(20) |
| 1 | 0 | 1 | 1 | 1 | 3 | 2 | 5 | 6 | 8 | 14 | 16 | 27 | 36 | 51 | 77 | 103 | 144 | 216 | 309 | 448 |
Didapatlah jawaban untuk soal ini, yaitu f(20) = 448.
Masuk untuk menulis jawaban
25. Bagi kasus terus pake Diophantine lagi aku sih ._.
200x + 300y + 500z = 2000
2x + 3y + 5z = 20
Bagi kasus
Kasus 1 :
z =0
2x + 3y = 20
Xo = 10
Yo = 0
x = 10 + 3t
y = 0 - 2t = -2t
t bilangan bulat
x >= 0 --> 10 + 3t >=0 --> 3t >= -10 --> t >= -3,33 (1)
y >=0 --> -2t >=0 --> t <= 0 (2)
Dari (1) dan (2) --> -3,33 <= t <= 0
t = -3, -2, -1, 0
Banyaknya kemungkinan urutan minum pada kasus ini = banyaknya cara mengacak = 114
Kasus 2 :
z = 1
2x + 3y = 15
Xo = 0
Yo = 5
x = 0 + 3t = 3t
y = 5-2t
t bilangan bulat
x >= 0 --> 3t >=0 --> t >= 0 (1)
y >= 0 --> 5-2t >= 0 --> 2t <= 5 --> t <= 2,5 (2)
Dari (1) dan (2)
0 <= t <= 2,5
t = 0, 1, 2
Banyak cara minum pada kasus ini = 202
Kasus 3 :
z = 2
2x + 3y = 10
Xo = 5
Yo = 0
x = 5 + 3t
y = 0 - 2t = -2t
t bilangan bulat
x >= 0 --> 5 + 3t >= 0 --> 3t >= -5 --> t >= -1,......
y >= 0 --> -2t >= 0 --> t <=0
-1,... <= t <= 0
t = -1,0
Banyaknya cara minum pada kasus ini = 111
Kasus 4 :
z = 3
2x + 3y = 5
Xo = 1
Yo = 1
x = 1 + 3t
y = 1 - 2t
t bilangan bulat
x >= 0 --> 1 + 3t >= 0 --> 3t >= -1 --> t >= -0,...
y >= 0 --> 1 - 2t >= 0 --> 2t <= 1 --> t <= 0,5
-0,... <= t <= 0,5
t = 0 --> x = 1, y = 1, z = 3. Banyaknya cara minum = 5! / (1! 1! 3!) = 20
Banyaknya cara minum pada kasus ini = 20
Kasus 5 :
z = 4
2x + 3y = 0
x = 0, y = 0, z = 4 --> Banyak cara minum = 4! / (0! 0! 4!) = 1
Banyaknya cara minum pada kasus ini = 1
Total banyak cara minum dari kasus 1 .. 5 = 114 + 202 + 111 + 20 + 1 = 448
CMIIW :')
23 (soal 24)
2 3 5 5 5 -> 5!/3! = 20
2 3 2 3 5 5 -> 6!/2!2!2! =90
2 3 2 3 2 3 5 -> 7!/3!3! =140
2 3 2 3 2 3 2 3 -> 8!/4!4! =70
3 3 3 3 3 3 2 -> 7!/6! = 7
5 3 3 3 3 3 -> 6!/5!= 6
5 2 2 2 2 2 2 3 -> 8!/6! = 56
2 2 2 2 2 2 2 3 3 -> 9!/7!2! = 36
23+20+90+140+70+7+6+56+36=448