문제 : https://www.acmicpc.net/problem/15991
[ 알고리즘풀이 ]
DP[N] : N 을 1, 2, 3의 합으로 대칭을 이루며 표현하는 경우의 수
→ DP[N] = DP[N - 2] + DP[N - 4] + DP[N - 6];
( 기존의 표현 방법에다가 양쪽 끝에 1 , 1 / 2, 2 / 3, 3 을 추가하면 된다. )
#include<iostream>
#define M 1000000009
using namespace std;
int T, N, dp[100001] = {};
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
dp[1] = 1, dp[2] = 2, dp[3] = 2, dp[4] = 3, dp[5] = 3, dp[6] = 6;
for (int i = 7; i <= 100000; i++) {
dp[i] = ((dp[i - 2] + dp[i - 4]) % M + dp[i - 6]) % M;
}
cin >> T;
while (T--) {
cin >> N;
cout << dp[N] << '\n';
}
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 11576 : Base Conversion - travelbeeee (0) | 2020.02.25 |
---|---|
[BOJ] 15992 : 1, 2, 3 더하기 7 - travelbeeee (0) | 2020.02.24 |
[BOJ] 15990 : 1, 2, 3 더하기 5 - travelbeeee (0) | 2020.02.24 |
[BOJ] 15989 : 1, 2, 3 더하기 4 - travelbeeee (0) | 2020.02.24 |
[BOJ] 12100 : 2048(Easy) - travelbeeee (0) | 2020.02.24 |