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

[BOJ] 1328 : ๊ณ ์ธต ๋นŒ๋”ฉ

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

1328๋ฒˆ: ๊ณ ์ธต ๋นŒ๋”ฉ (acmicpc.net)

 

1328๋ฒˆ: ๊ณ ์ธต ๋นŒ๋”ฉ

์ƒ๊ทผ์ด๊ฐ€ ์‚ด๊ณ ์žˆ๋Š” ๋™๋„ค์—๋Š” ๋นŒ๋”ฉ N๊ฐœ๊ฐ€ ํ•œ ์ค„๋กœ ์„ธ์›Œ์ ธ ์žˆ๋‹ค. ๋ชจ๋“  ๋นŒ๋”ฉ์˜ ๋†’์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉฐ, ๊ฐ™์€ ๋†’์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋นŒ๋”ฉ์€ ์—†๋‹ค. ์ƒ๊ทผ์ด๋Š” ํ•™๊ต ๊ฐ€๋Š” ๊ธธ์— ๊ฐ€์žฅ ์™ผ

www.acmicpc.net

์™ผ์ชฝ์—์„œ ๋ณธ ๋นŒ๋”ฉ์˜ ๊ฐœ์ˆ˜์™€ ์˜ค๋ฅธ์ชฝ์— ๋ณธ ๋นŒ๋”ฉ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ๋นŒ๋”ฉ ๋ฐฐ์น˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

 

์ฐธ๊ณ  ๋งํฌ

https://beginthread.tistory.com/151

 

[ BOJ ๋ฐฑ์ค€ 1328๋ฒˆ - ๊ณ ์ธต ๋นŒ๋”ฉ ] ํ•ด์„ค ๋ฐ ์ฝ”๋“œ

https://www.acmicpc.net/problem/1328 ๋ชฉ์  ๋นŒ๋”ฉ์˜ ๊ฐœ์ˆ˜ N, ๊ฐ€์žฅ ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ๋ดค์„ ๋•Œ ๋ณด์ด๋Š” ๋นŒ๋”ฉ์˜ ์ˆ˜ L๊ณผ R์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€๋Šฅํ•œ ๋นŒ๋”ฉ ์ˆœ์„œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜์ž. ์ ‘๊ทผ๋ฒ• 1. ๋นŒ๋”ฉ์„ ์„ธ์šฐ๋Š” ๊ณผ

beginthread.tistory.com

 

ํ’€์ด

์‹œ์ž‘์ „์—, ํ”Œ๋ ˆํ‹ฐ๋„˜ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์— ์ƒ‰์•ˆ๊ฒฝ์ด ์”Œ์›Œ์ ธ ๋‘๋ ค์›€๋ถ€ํ„ฐ ๊ฐ–๊ณ  ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์•„์ด๋””์–ด๊ฐ€ ๋”์šฑ ์ž˜ ๋– ์˜ค๋ฅด์ง€์•Š์•„ ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ๊ณ ์ˆ˜๋ถ„์˜ ์•„์ด๋””์–ด๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ํ’€์—ˆ๋‹ค.

๊ณต๋ถ€ํ•œ๋‹ค๋Š” ๋งˆ์Œ์œผ๋กœ ์•„์ด๋””์–ด๋ฅผ ๋‚ด ๋ฐฉ์‹์œผ๋กœ ๋‹ค์‹œ ์ ์–ด๋ณด๋ คํ•œ๋‹ค.

โ—†๋นŒ๋”ฉ์€ ๋†’์€ ๋นŒ๋”ฉ๋ถ€ํ„ฐ ๋‚ฎ์€ ๋นŒ๋”ฉ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

ํ˜„์žฌ๊นŒ์ง€ ๋นŒ๋”ฉ์ด ์ด๋ ‡๊ฒŒ ๋ฐฐ์น˜๋˜์–ด์žˆ๋‹ค๊ณ  ํ•ด๋ณด๋ฉด, ์ด 10๊ฐœ์˜ ๋นŒ๋”ฉ์ด ์„ธ์›Œ์ ธ์žˆ๊ณ  ์™ผ์ชฝ์—์„œ ๋ดค์„ ๋•Œ 3๊ฐœ ์˜ค๋ฅธ์ชฝ์—์„œ ๋ดค์„ ๋•Œ 2๊ฐœ๊ฐ€ ๋ณด์ด๋Š” ์ƒํ™ฉ์ด๋‹ค.

๋นŒ๋”ฉ์€ ๋†’์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋†’์€ ๋นŒ๋”ฉ๋ถ€ํ„ฐ ๋ฐฐ์น˜ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ, ๋‹ค์Œ ์„ธ์šธ ๋นŒ๋”ฉ์€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋นŒ๋”ฉ์ด ๋  ๊ฒƒ์ด๋‹ค.

์ƒˆ๋กœ์šด ๋นŒ๋”ฉ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ด 11๊ฐ€์ง€์ด๋‹ค. 11๊ฐ€์ง€๋ฅผ L๊ณผ R์— ๋”ฐ๋ผ 3๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•ด๋ณด๋ฉด

1. ๋งจ ์™ผ์ชฝ์— ์„ค์น˜๋ฅผ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ L = 4๋กœ ๋ฐ”๋€Œ๊ณ  R = 2๋กœ ์œ ์ง€๋œ๋‹ค.

2. ๊ฐ€์šด๋ฐ์— ์„ค์น˜ ํ•  ๊ฒฝ์šฐ L = 3, R = 2 ๋ชจ๋‘ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์šด๋ฐ๋ผ๋Š” ๊ฒƒ์€ ์–‘๋์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ตฌ์—ญ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์šด๋ฐ = 11 - 2(์–‘๋) = 9๊ฐ€์ง€.

3. ๋งจ ์˜ค๋ฅธ์ชฝ์— ์„ค์น˜ ํ•  ๊ฒฝ์šฐ L = 3์œผ๋กœ ์œ ์ง€๋˜๊ณ , R = 3๋กœ ๋ฐ”๋€๋‹ค.

DP ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ DP[N][L][R] ๋กœ ์„ค์ •ํ•˜๋ฉด

์ ํ™”์‹์€ DP[i][j][k] = DP[i-1][j-1][k] + DP[i-1][j][k] * (i-2) + DP[i-1][j][k-1] ๋กœ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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 = 100 + 5;
ll DP[MAX_N][MAX_N][MAX_N];
int N, L, R;
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N >> L >> R;
    DP[1][1][1= 1;
    for (int i = 2; i <= N; i++) {
        for (int j = 1; j <= L; j++) {
            for (int k = 1; k <= R; k++) {
                DP[i][j][k] = (DP[i - 1][j - 1][k] + DP[i - 1][j][k - 1+ DP[i - 1][j][k] * (i - 2)) % mod;
            }
        }
    }
    cout << DP[N][L][R] << "\n";
}
cs

ํ”Œ๋ ˆํ‹ฐ๋„˜ ๋ฌธ์ œ๋„ ์ž์‹ ์žˆ๊ฒŒ ํ’€๋ฉด ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋Š๋‚Œ์„ ์ค€ ๋ฌธ์ œ๋‹ค.

์‚ฌ์ง„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ฃผ์‹  ์žฌ๋ฏธ์ง€๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

728x90