---
# System prepended metadata

title: Hint Latihan Dynamic Programming

---

# Hint Latihan Dynamic Programming

## A - Recursion: Davis' Staircase 

Misalkan $f(n)$ adalah banyaknya cara menuju ke anak tangga ke-n

Asumsi dia berada di lantai dan bisa dianggap anak tangga ke-0

Untuk sampai pada anak tangga ke-n, ada 3 kemungkinan : 
* loncatan terakhir sejauh 1, artinya ia perlu pergi ke anak tangga ke-(n-1) dulu -> banyak cara = $f(n-1)$
* loncatan terakhir sejauh 2, artinya ia perlu pergi ke anak tangga ke-(n-2) dulu -> banyak cara = $f(n-2)$
* loncatan terakhir sejauh 3, artinya ia perlu pergi ke anak tangga ke-(n-3) dulu -> banyak cara = $f(n-3)$

Sehingga,

$f(n) = f(n-1)+f(n-2)+f(n-3)$

$f(0) = 1$

$f(1) = 1$

$f(2) = 2$


## B - The Triangle 

Perhatikan array untuk menampung segitiga bilangan
```
a[1][1]
a[2][1] a[2][2]
a[3][1] a[3][2] a[3][3]
a[4][1] a[4][2] a[4][3] a[4][4]
....
a[n][1] a[n][2] a[n][3]  . . .  a[n][n]
```

Misal $f(n,m)$ adalah total bilangan maksimal yg diperoleh jika kita mulai dari bilangan di baris $n$ dan kolom $m$ atau posisi $(n,m)$

Dari posisi $(n,m)$ kita akan mendapatkan bialngan $a[n][m]$ dan bisa loncat ke 2 tempat : 
* Jika loncat ke posisi $(n+1,m)$, maka berikutnya kita akan mendapatkan total maksimal $f(n+1,m)$
* Jika loncat ke posisi $(n+1,m+1)$, maka berikutnya kita akan mendapatkan total maksimal $f(n+1,m+1)$

Sehingga,

$f(n,m) = a[n][m] + max(f(n+1,m), f(n+1,m+1))$
jika n baris terakhir, maka $f(n,m) = a[n][m]$

## C - Typical Stairs 

Misal $f(n)$ = banyaknya cara ke pijakan ke-n

Jika pijakan ke-n rusak, maka
$f(n) = 0$
Jika pikanan ke-n tidak rusak, maka
$f(n) = f(n-1) + f(n-2)$

## D - Mashmokh and ACM 

Misal $f(n, k)$ = banyaknya barisan sepanjang k yang suku terakhirnya adalah n

Perhatikan bahwa suku kedua terakhir haruslah faktor dari n. Untuk melengkapinya, kita perlu membuat barisan sepanjang k-1 dengan suku terakhirnya adalah faktor dari n.

$f(n, k) = f(d_1, k-1) + f(d_2, k-1) + f(d_3, k-1)...$

dimana $d_1, d_2, d_3, ...$ adalah faktor dari n

