728x90
문제출처: https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
1. 코드
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
|
#include <iostream>
#include <algorithm>
using namespace std;
int test;
int n, m;
int dp[31][31];
//조합 공식
//mCn = m-1Cn+m-1Cn-1
int find(int n, int m) {
if (dp[m][n] == 0)
dp[m][n] = find(n, m - 1) + find(n - 1, m - 1);
return (dp[m][n]);
}
int main() {
scanf("%d", &test);
//test 케이스 별로 배열 초기화 해주기
for (int i = 0; i < 30; i++)
for (int j = 0; j < 30; j++)
dp[i][j] = 0;
for (int i = 0; i < 30; i++) {
dp[i][i] = 1;
dp[i][0] = 1;
}
for (int i = 0; i < test; i++) {
scanf("%d %d", &n, &m);
printf("%d\n", find(n, m));
}
return 0;
}
|
cs |
2. 해결과정
M개에서 N개를 겹치지 않게 뽑는 조합의 문제 mCn을 풀어주면 된다.
점화식은 m-1Cn-1+m-1Cn 성질과 nCn=1, nC0=1를 이용해주면 된다.
테스트 케이스 별로 배열을 초기화 시켜줘야한다.
3. 느낀점
처음에는 초기화를 안시켰고, 조합을 구현하는것에 어려움을 느꼈다. dp는 어려워잉
728x90
'공부 자료 > 알고리즘' 카테고리의 다른 글
(Python/파이썬) 백준 1003번 - 피보나치 함수 (0) | 2021.08.03 |
---|---|
(Python/파이썬) 백준 1149번 - RGB거리 (0) | 2021.08.03 |
(C/C++) 백준 1932번 - 정수 삼각형 (0) | 2021.08.02 |
(C/C++) 백준 2748번 - 피보나치 수 2 (0) | 2021.08.02 |
(Python/파이썬) 백준 1094번 - 막대기 (0) | 2021.08.01 |