그래프와 양대산맥을 이루는 DP는 코딩테스트 단골문제 이자, 많은 응용이 가능한 알고리즘이다.
→ DP는 중복 계산을 최소화하고 최적의 해를 찾을 때 사용
고등학교 때 '수열'을 배우며, 점화식의 개념을 익혔을 것이다. 수열의 점화식이란 수열의 일반항을 구하기 위해 전항과 다음항 간의 일반화된 식을 나타낸다.
가령, 피보나치 수열의 점화식을 작성하면 다음과 같다.
f(n) = 0 if n=0
f(n) = 1 if n=1
f(n) = f(n-1) + f(n-2) if n>1
※ 재귀함수 ver.
#include <iostream>
using namespace std;
int fibo(int x){
if(x<=1) return x;
return fibo(x-1) + fibo(x-2);
}
int main(){
int T;
cin >> T;
cout << fibo(T);
}
※ DP ver
#include <iostream>
using namespace std;
int arr[10001];
int Fibo(int x){
if(x<=1){
arr[x]=x;
return arr[x];
}
if(arr[x]!=0){
return arr[x];
}
arr[x] = fibo(x-1) + fibo(x-20;
return arr[x];
}
int main(){
int T;
cin >> T;
cout << Fibo(T);
}