문제
특징
이것은 예전에 그냥 피보나치 함수를 넣어서 풀었던 문제이다. 그렇게 풀 수도 있지만 dp top-down방식으로도 가능하다
시간복잡도는 solve함수에서 2개의 재귀를 돌려서 2^n이다.
소스
#include <iostream>
#include <memory.h>
using namespace std;
//dp[i] i는 i번째 피보나치수의 값
//dp[n] =do[n-1] + dp[n-2]
int n;
int dp[200];
//시간복잡도 2^n
int solve(int idx) {
if (idx < 1) return 0;
if (dp[idx] != -1) return dp[idx];
dp[idx] = solve(idx - 1) + solve(idx - 2);
return dp[idx];
}
int main() {
cin >> n;
memset(dp, -1, sizeof(dp));
dp[1] = 1;
dp[2] = 1;
cout << solve(n);
return 0;
}
'알고리즘' 카테고리의 다른 글
백준 오큰수 (1) | 2021.12.25 |
---|---|
백준 쿼드트리 (c++, recursion) (0) | 2021.12.24 |
백준 3190 뱀 (c++) (0) | 2021.12.20 |
네트워크 복구 백준 2211 (c++) (0) | 2021.12.16 |
길 찾기 게임 (c++) (0) | 2021.12.15 |