풀이
f(2)를 계산하고 바로 D[n]=3∗D[n−2]D[n] = 3 * D[n - 2]D[n]=3∗D[n−2]라고 생각할 수 있지만
2(D[n−4]+D[n−6]+D[n−8]+...)2(D[n - 4] + D[n - 6] + D[n - 8] + ... )2(D[n−4]+D[n−6]+D[n−8]+...)0이상까지 추가로 더해야 줘야 한다.
그 이유는 힌트 속 그림에 있다.
코드
#include <cstdio>
int n, dp[10001] = {1, 0, 3};
int main()
{
scanf("%d", &n);
for (int i = 4; i <= n; ++i)
{
dp[i] = 3 * dp[i - 2];
for (int j = 4; j <= i; j += 2)
{
dp[i] += 2 * dp[i - j];
}
}
printf("%d\n", dp[n]);
return 0;
}
'온라인저지' 카테고리의 다른 글
10844번: 쉬운 계단 수 (0) | 2018.06.01 |
---|---|
[BOJ] 2718번: 타일 채우기 (0) | 2018.05.31 |
[BOJ] 1520번: 내리막 길 (0) | 2018.05.31 |
[BOJ] 2355번: 시그마 (0) | 2018.05.26 |
[BOJ] 2941번: 크로아티아 알파벳 (0) | 2018.05.26 |
[BOJ] 1026번: 보물 (0) | 2018.05.25 |
댓글