IDEA
규칙만 찾으면 된다. 써보자
N = 1 1개 1
N = 2 2개 00 , 11
N = 3 3개 100 , 001, 111
N = 4 5개 1100 , 1001 , 0011, 0000, 1111
dp[n] = dp[n-1] + dp[n-2] (n > 2) 라는 점화식을 세울 수 있다.
그 후 문제의 조건에 맞게 15746으로 항상 나눠주면 된다.
코드
#include <iostream>
#include <vector>
using namespace std;
int dp[1000001] = {0};
int main() {
int n;
scanf("%d", &n);
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = (dp[i - 1] % 15746 + dp[i - 2] % 15746) % 15746;
}
printf("%d", dp[n]);
}
'알고리즘 > 백준 단계별로 풀기 (12.26 ~ 12.31)' 카테고리의 다른 글
BFS 및 DFS - 백준 7576번 토마토 (0) | 2020.12.27 |
---|---|
백트래킹 - 백준 15649번 N과 M (1) ~ (4) (0) | 2020.12.27 |
다이나믹프로그래밍1 - 백준 9461번 파도반 수열 (0) | 2020.12.27 |
다이나믹프로그래밍1 - 백준 2748번 피보나치 수 2 (0) | 2020.12.27 |
분할정복 - 백준 1992번 쿼드트리 (0) | 2020.12.27 |