다이나믹 프로그래밍

빠른 설명

다이나믹 프로그래밍(DP)은 같은 부분 문제를 반복해서 풀지 않도록 값을 저장해 두는 방법이다. 점화식과 초기값이 핵심이다.

언제 쓰는가

  • 현재 답이 이전 답들로 표현될 때
  • 같은 상태를 여러 번 계산하게 될 때
  • 최댓값, 최솟값, 경우의 수를 누적해서 구할 때

시간복잡도

  • 보통 상태 수 × 상태 하나를 계산하는 비용
  • 예: 피보나치 DP는

참고자료

C++ 코드

#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
 
int main() {
    int n = 10;
    vector<long long> dp(n + 1);
 
    dp[0] = 0;
    dp[1] = 1;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
 
    cout << dp[n] << '\n';
}

Python 코드

n = 10
dp = [0] * (n + 1)
 
dp[0] = 0
dp[1] = 1
for i in range(2, n + 1):
    dp[i] = dp[i - 1] + dp[i - 2]
 
print(dp[n])