case1) n이 0 혹은 1일 때,
0 / 1을 출력
case2) n이 2이상 일 때,
memoizate해 놓은 이전 두개의 수를 더한 수를 출력
하지만 이런식으로 진행한다면 시간초과가 발생한다
memoization을 사용하여 연산을 최대한 줄여야 한다
#include <iostream>
#include <iomanip>
#include <vector>
#include <utility>
#include <string>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
using namespace std;
#define endl '\n'
int N;
long long fib[100];
long long pibo(int n)
{
if(n==0){
return 0;
}
if(n==1){
return 1;
}
if(fib[n]!=-1)
return fib[n];
else{
fib[n] = pibo(n-1)+pibo(n-2);
return fib[n];
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
for(int i=0; i<100; i++){
fib[i]=-1;
}
cin >> N;
cout<<pibo(N)<<endl;
}
'알고리즘 > Dynamic Programming' 카테고리의 다른 글
[DP] 백준 20500번 - Ezreal 여눈부터 가네 - Python 파이썬 (0) | 2021.10.15 |
---|---|
[DP] 프로그래머스 고득점킷 N으로 표현 - Python 파이썬 (0) | 2021.10.10 |
[DP] Dynamic Programming 동적계획법 이란? (0) | 2021.09.27 |
[DP] 백준 1757번 - 달려달려 (0) | 2021.02.05 |
[DP] 백준 15988번 - 1, 2, 3 더하기 3 (0) | 2021.01.28 |