๋ฌธ์ ๋งํฌ
1328๋ฒ: ๊ณ ์ธต ๋น๋ฉ (acmicpc.net)
์ผ์ชฝ์์ ๋ณธ ๋น๋ฉ์ ๊ฐ์์ ์ค๋ฅธ์ชฝ์ ๋ณธ ๋น๋ฉ์ ๊ฐ์๊ฐ ์ฃผ์ด์ก์ ๋ ๊ฐ๋ฅํ ๋น๋ฉ ๋ฐฐ์น์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
์ฐธ๊ณ ๋งํฌ
https://beginthread.tistory.com/151
ํ์ด
์์์ ์, ํ๋ ํฐ๋ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์์๊ฒฝ์ด ์์์ ธ ๋๋ ค์๋ถํฐ ๊ฐ๊ณ ์์ํ๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ์์ด๋์ด๊ฐ ๋์ฑ ์ ๋ ์ค๋ฅด์ง์์ ๊ฒฐ๊ตญ ๋ค๋ฅธ ๊ณ ์๋ถ์ ์์ด๋์ด๋ฅผ ์ฐธ๊ณ ํด์ ํ์๋ค.
๊ณต๋ถํ๋ค๋ ๋ง์์ผ๋ก ์์ด๋์ด๋ฅผ ๋ด ๋ฐฉ์์ผ๋ก ๋ค์ ์ ์ด๋ณด๋ คํ๋ค.
โ๋น๋ฉ์ ๋์ ๋น๋ฉ๋ถํฐ ๋ฎ์ ๋น๋ฉ์์ผ๋ก ๋ฐฐ์นํ๋ค๊ณ ์๊ฐํ๋ค.
ํ์ฌ๊น์ง ๋น๋ฉ์ด ์ด๋ ๊ฒ ๋ฐฐ์น๋์ด์๋ค๊ณ ํด๋ณด๋ฉด, ์ด 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<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 = 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 |
ํ๋ ํฐ๋ ๋ฌธ์ ๋ ์์ ์๊ฒ ํ๋ฉด ํ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ๋๋์ ์ค ๋ฌธ์ ๋ค.
์ฌ์ง ์ฌ์ฉํ๊ฒ ํด์ฃผ์ ์ฌ๋ฏธ์ง๋ ๊ฐ์ฌํฉ๋๋ค!
'๋ฐฑ์ค > Platinum' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 13308 : ์ฃผ์ ์ (0) | 2022.03.15 |
---|---|
[BOJ] 10272 : ํ์๊ธ ์ฌ๋ฅ๊พผ ๊น์ ์ (0) | 2022.03.11 |
[BOJ] 2842 : ์ง๋ฐฐ์ ํ์๋ (0) | 2022.03.10 |
[BOJ] 3197 : ๋ฐฑ์กฐ์ ํธ์ (0) | 2022.03.08 |
[BOJ] 5719 : ๊ฑฐ์ ์ต๋จ ๊ฒฝ๋ก (0) | 2022.01.27 |