๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #1010 ๋‹ค๋ฆฌ๋†“๊ธฐ

by dar0m! 2019. 10. 2.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 128 MB 47.942%

 

 

1010๋ฒˆ: ๋‹ค๋ฆฌ ๋†“๊ธฐ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๊ฐ•์˜ ์„œ์ชฝ๊ณผ ๋™์ชฝ์— ์žˆ๋Š” ์‚ฌ์ดํŠธ์˜ ๊ฐœ์ˆ˜ ์ •์ˆ˜ N, M (0 < N ≤ M < 30)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฐฉ๋ฒ•

๋‹ค๋ฆฌ ๋†“๊ธฐ

'dp[i][j]๋Š” ์„œ์ชฝ์— i ๊ฐœ์˜ ์ ์ด ์žˆ๊ณ , ๋™์ชฝ์— j ๊ฐœ์˜ ์ ์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฆฌ์˜ ์ˆ˜' ๋ผ๊ณ  ์ •์˜๋ฅผ ํ•ด๋ณด์•˜๋‹ค.๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ดค๋Š”๋ฐ, ๊ฐ™์€ i๊ฐœ์˜ ์ ์ผ ๋•Œ๋Š” j๊ฐ’์— ๋”ฐ๋ผ ๊ฐ™์€ ๋ชจ์Šต์˜ ๋‹ค๋ฆฌ๋“ค์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ณ 

์™ผ์ชฝ ์ƒ๋‹จ์— ๋ณด์ด๋“ฏ์ด ํ‘œ๋ฅผ ์ฑ„์›Œ๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

dp ๋ฐฐ์—ด

๊ทธ๋ž˜์„œ ์‹์„ ์„ธ์›Œ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

  • i == 1
    dp[i][j] = j;
  • i > 1
    dp[i][j] = dp[i][j-1] + dp[i-1][j-1]

 

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1124 KB 0 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int t, n, m, dp[55][35];
int main(){
    for (int i = 1; i < 30; i++)
        dp[1][i] = i;
    for (int i = 2; i < 30; i++) {
        for (int j = i; j < 30; j++) {
            if (i == j)dp[i][j] = 1;
            else {
                dp[i][j] = dp[i][j - 1+ dp[i - 1][j - 1];
            }
        }
    }
    scanf("%d"&t);
    while (t--) {
        scanf("%d %d"&n, &m);
        printf("%d\n", dp[n][m]);
    }
    
    return 0;
}
cs

 

๋Œ“๊ธ€