My first Magazine pemrograman-kompetitif-dasar | Page 85

7.2 Contoh-contoh DP Sederhana Solusi Top-Down Kita implementasikan d p(i, j) sebagai fungsi SOLVE (i, j). Algoritma 36 LCS secara top-down . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: function SOLVE (i, j) if (i = 0 ∨ j = 0) then return 0 end if if computed[i][ j] then return memo[i][ j] end if if (A[i] = B[ j]) then best ← SOLVE (i − 1, j − 1) + 1 else best ← max( SOLVE (i − 1, j), SOLVE (i, j − 1)) end if computed[i][ j] ← true memo[i][ j] ← best return best end function Jawaban akhirnya ada pada SOLVE (M, N). Solusi Bottom-Up Algoritma 37 LCS secara bottom-up . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: function SOLVE () for i ← 0, M do . Base case d p[i][0] ← 0 end for for j ← 0, N do d p[0][ j] ← 0 end for for i ← 1, M do . Isi "tabel" dari kasus yang kecil ke besar for j ← 1, N do if (A[i] = B[ j]) then d p[i][c] ← d p[i − 1][ j − 1] + 1 else d p[i][c] ← max(d p[i − 1][ j], d p[i][ j − 1]) end if end for end for return d p[M][N] end function 75