๋ฌธ์ ๋งํฌ
2133๋ฒ: ํ์ผ ์ฑ์ฐ๊ธฐ (acmicpc.net)
2133๋ฒ: ํ์ผ ์ฑ์ฐ๊ธฐ
3×N ํฌ๊ธฐ์ ๋ฒฝ์ 2×1, 1×2 ํฌ๊ธฐ์ ํ์ผ๋ก ์ฑ์ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด๋ณด์.
www.acmicpc.net
๋ํ์ ์ธ DP๋ฌธ์ 2XN ํ์ผ๋ง์ ๋ณํ ๋ฌธ์ .
ํ์ด
2XN ํ์ผ๊ณผ ๋ค๋ฅด๊ฒ ์ฌ๊ธฐ์๋ ๋์ด๊ฐ 3์ด๋ค.
N = 1 : 3X1ํฌ๊ธฐ์ ๋ฒฝ์ 2X1 ํ์ผ์ ๊ฐ์ง๊ณ ์ฑ์ธ ์ ์๋ค. DP[1] = 0
N = 2 : 3X2ํฌ๊ธฐ์ ๋ฒฝ์ 2X1 ํ์ผ์ ๊ฐ์ง๊ณ ์ฑ์ฐ๋ ๊ฒฝ์ฐ์ ์๋ 3. DP[2] = 3
N = 3 : 3X3 ๋ฒฝ์ 2X1 ํ์ผ์ ๊ฐ์ง๊ณ ์ฑ์ธ ์ ์๋ค. DP[3] = 0
์ฌ๊ธฐ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋์น ์ฑ ์ ์๋ค. N์ด ํ์์ธ ๊ฒฝ์ฐ์๋ ๋ฒฝ์ ์์ ํ ์ฑ์ฐ์ง ๋ชปํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ N์ด ํ์๋ผ๋ฉด ๊ฒฝ์ฐ์ ์๋ 0์ด๋ค.
N = 4 : N์ด 4์ผ๋๋ ๊ธฐ์กด์ ๊ตฌํ๋ N = 2์ธ ๊ฒฝ์ฐ๋ฅผ ์กฐํฉํด์ ๋ง๋ค ์ ์๋ค.
DP[2] * DP[2] = 9. ๊ทธ๋ฐ๋ฐ N = 4 ์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๋ฒฝ์ ๋ชจ์์ด ์๋ค.
๋ฐ๋ก ์ด๋ฐ ๋ชจ์์ด๋ค. ๊ฐ๋ก์ ๊ธธ์ด๊ฐ 4์ผ๋๋ง ๋ง๋ค ์ ์๋ ๋ชจ์์ด๋ค. ์์๋ ๋ค์ง์ ์ ์์ผ๋ฏ๋ก
๊ฐ๋ก์ ๊ธธ์ด๊ฐ 4์ผ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 2๊ฐ์ง.
DP[4] = 9 + 2 = 11 ์ด๋ค.
N = 6์ผ๋๋ ์์ ๊ตฌํ N = 4 ์ผ ๋์ ๊ฒฝ์ฐ์ ๋ค์ N = 2 ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ถ์ฌ์ ๋ง๋ค ์ ์๋ค. (DP[4] * DP[2])
ํ์ง๋ง ์ด๊ฒ ๋ค๊ฐ ์๋๋ค.
N = 4์ผ๋๋ง ๋ง๋ค ์ ์๋ ๋ชจ์์ด ์์๋ค. DP[2] * (4์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 2๊ฐ์ง) ๋ฅผ ๋ํด์ค์ผํ๋ค.
๋ N = 6์ผ๋๋ง ๋ง๋ค ์ ์๋ ๋ชจ์์ด ์กด์ฌํ๋ค.
์ด๊ฒ๋ ์์๋๊ฐ ๋ค์งํ ๋ชจ์ ๊น์ง ์๊ฐํ๋ฉด ์ด 2๊ฐ์ง์ด๋ค.
์ฌ๊ธฐ์ ์ ์ ์๋ ๊ฒ์ ๊ฐ ๊ฐ๋ก ๊ธธ์ด๋ง๋ค ๊ณ ์ ํ๊ฒ ๋ง๋ค ์ ์๋ ๋ชจ์์ด 2๊ฐ์ง ์ฉ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ DP[6] = DP[6-2] * DP[2] + DP[2] * (4์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 2๊ฐ์ง) + (6์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 2๊ฐ์ง)
ํด์ DP[6] = 41 ์ด๋ค.
๊ฐ์ ๋ ผ๋ฆฌ๋ก N = 8์ธ ๊ฒฝ์ฐ๊น์ง๋ง ๋ณด์๋ฉด
DP[8] = DP[8-2] * DP[2] + DP[4] * (4์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ) + DP[2] * (6์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ) + (8์ผ ๋๋ง ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 2๊ฐ์ง)
์ด๋ ๊ฒ ์๊ฐ ํ ์ ์๋ค.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef priority_queue<pair<pair<int, int>, int>, vector<pair<pair<int, int>, int>>, greater<pair<pair<int, int>, int>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 30 + 5;
int DP[MAX_N];
int N;
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
DP[2] = 3;
cin >> N;
for (int i = 4; i <= N; i+=2) {
DP[i] = DP[i - 2] * DP[2] + 2;
for (int j = 4; j <= i - 2; j += 2) {
DP[i] += DP[i - j] * 2;
}
}
cout << DP[N] << "\n";
return 0;
}
|
cs |
์ด๊ฑธ ์ฝ๋๋ก ์์ฑํด์ฃผ๋ฉด ์ด๋ ๊ฒ ๋๋ค.
N ์ด ํ์์ธ ๊ฒฝ์ฐ๋ ๊ฑด๋๋ฐ์ด๋ ๋๋๊น i += 2๋ฅผ ํด์คฌ๋ค.
'๋ฐฑ์ค > Gold' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2225 : ํฉ๋ถํด (0) | 2022.03.02 |
---|---|
[BOJ] 1937 : ์์ฌ์์ด ํ๋ค (0) | 2022.03.01 |
[BOJ] 13392 : ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ์ง ์๋ ์ซ์ ๋ง์ถ๊ธฐ (0) | 2022.02.25 |
[BOJ] 2169 : ๋ก๋ด ์กฐ์ข ํ๊ธฐ (0) | 2022.02.24 |
[BOJ] 1509 : ํฐ๋ฆฐ๋๋กฌ ๋ถํ (0) | 2022.02.24 |