반응형
#INFO
난이도 : SILVER3
알고리즘 유형 : DP
출처 : 1904번: 01타일 (acmicpc.net)
#SOLVE
DP를 이용해 문제를 풀이하였습니다.
문제의 핵심은 타일의 마지막 수가 0으로 끝나는지 1로 끝나는지에 따라 케이스를 구분해 점화식을 세우는 것입니다.
마지막 수가 1로 끝나는 타일들은 DP[i-1] 값의 타일들에서 오른쪽에 1타일을 추가한 것이고, 마지막 수가 0으로 끝나는 타일들은 DP[i-2] 값의 타일들에서 오른쪽에 00타일을 추가한 것 입니다.
따라서 다음과 같이 점화식을 세우면 됩니다.
//init
dp[1] = 1;
dp[2] = 2;
//solve
int n;
cin >> n;
for (int i = 3 ; i <= n ; i++) {
dp[i] = (dp[i-2] + dp[i-1]) % 15746;
}
#CODE
#include <iostream>
using namespace std;
int main(){
//init
long long dp[1000001];
dp[1] = 1;
dp[2] = 2;
//solve
int n;
cin >> n;
for (int i = 3 ; i <= n ; i++) {
dp[i] = (dp[i-2] + dp[i-1]) % 15746;
}
cout << dp[n];
return 0;
}
반응형
'Archive2 > ProblemSolving' 카테고리의 다른 글
[BOJ] 3986 "좋은 단어" 문제 풀이 & 소스 코드 With C/C++ (0) | 2022.02.11 |
---|---|
[BOJ] 1018 "체스판 다시 칠하기" 문제 풀이 & 소스 코드 With C/C++ (0) | 2022.02.08 |
[BOJ] 9461 "파도반 수열" 문제 풀이 & 소스 코드 With C/C++ (0) | 2022.02.05 |
[BOJ] 4949 "균형잡힌 세상" 문제 풀이 & 소스 코드 With C/C++ (0) | 2022.02.03 |
[BOJ] 1966 "프린터 큐" 문제 풀이 & 소스 코드 With C/C++ (0) | 2022.01.29 |