๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Gold

[BOJ] 2133 : ํƒ€์ผ ์ฑ„์šฐ๊ธฐ

by Jaeguk 2022. 3. 1.
๋ฌธ์ œ ๋งํฌ

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 

์ด๋ ‡๊ฒŒ 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<intint>int>vector<pair<pair<intint>int>>, greater<pair<pair<intint>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๋ฅผ ํ•ด์คฌ๋‹ค.

 

728x90