[ 문제 ]
15990번: 1, 2, 3 더하기 5 (acmicpc.net)
[ 접근방법 ]
dp[ i ][ j ] = j로 시작해서 총 합이 i인 경우의 수
위와 같이 정의를 하고 같은 수를 연속으로 사용하는 것에 유의하며 DP를 활용한다.
[ 소스코드 ]
#include <iostream>
using namespace std;
const long long MOD = 1000000009;
int t, n;
long long dp[100010][4];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
dp[1][1] = 1;
dp[2][2] = 1;
dp[3][3] = 1;
for(int i = 2; i <= 100000; i++){
if(i > 1)dp[i][1] = (dp[i - 1][2] + dp[i - 1][3]) % MOD;
if(i > 2)dp[i][2] = (dp[i - 2][1] + dp[i - 2][3]) % MOD;
if(i > 3)dp[i][3] = (dp[i - 3][1] + dp[i - 3][2]) % MOD;
}
cin >> t;
while(t--){
cin >> n;
cout << (dp[n][1] + dp[n][2] + dp[n][3]) % MOD << "\n";
}
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 1072 : 게임 (1) | 2024.09.24 |
---|---|
[ 백준 / C++ ] 1015 : 수열 정렬 (0) | 2024.09.23 |
[ 백준 / C++ ] 11505 : 구간 곱 구하기 (0) | 2024.09.04 |
[ 백준 / C++ ] 1043 : 거짓말 (0) | 2024.08.30 |
[ 백준 / C++ ] 12851 : 숨바꼭질 2 (0) | 2024.08.26 |