#문제
2133번: 타일 채우기
3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.
www.acmicpc.net
#풀이 & 학습한 내용
이번문제에서 가로길이가 0일때의 경우의 수를 1로 설정해줘야한다. 그리고 가로길이가 홀수일때는 총 타일수가 홀수 개가 되므로 항상 경우의 수가 0이다. 마지막에 어떤 타일로 끝날 수 있는지 분석해야하는 과정이 쉽지 않다. 점화식을 세우고 base케이스를 채운 뒤 for문을 통해 dp배열을 채워나가 답을 구했다.
#소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include<iostream>
#include<algorithm>
using namespace std;
int dp[32];
int main(void) {
int N;
cin >> N;
dp[0] = 1;
dp[2] = 3;
for (int i = 3; i <= N; i++) {
if (i % 2 != 0) {
dp[i] = 0;
}
else {
dp[i] += 3 * dp[i - 2];
for (int j = 4; i-j>=0; j++) {
dp[i] += 2 * dp[i - j];
}
}
}
cout << dp[N] << '\n';
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_2133.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[Python] 백준 14501번 : 퇴사 (S4) (0) | 2021.03.01 |
---|---|
[C++] 백준 17404번 : RGB거리 2 (G4) (0) | 2020.11.18 |
[C++] 백준 13398번 : 연속합 2 (G5) (0) | 2020.11.18 |
[C++] 백준 11054번 : 가장 긴 바이토닉 부분 수열 (G3) (0) | 2020.11.18 |
[C++] 백준 11055번 : 가장 큰 증가 부분 수열 (S2) (0) | 2020.11.15 |