간단한 DP 연습 문제. 아래 점화식을 N = 3, 4, 5 반복해보면 관찰할 수 있다.
DP[i] = DP[i-1] + DP[i-2] * 2
N 은 1000보다 작은 정수이므로 위 점화식으로 시간 복잡도 안으로 구하기 가능. 끝.
#include <bits/stdc++.h>using namespace std;int DP[1001] = {0, 1, 3};int main() {int N;scanf("%d", &N);for(int i = 3; i <= N; ++i) {DP[i] = DP[i-1] + (DP[i-2] << 1);DP[i] %= 10007;}printf("%d\n", DP[N]);return 0;}