1010번 - 다리 놓기
<문제>
https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
<문제 풀이>
점화식: dp[n][m] = dp[n][m - 1] + dp[n - 1][m - 1]
n 값이 1일 때, 경우의 수는 m의 값을 따른다.
n == m 일 때, 경우의 수는 1이다.
<코드>
더보기
#include <iostream>
#define MAX 31
using namespace std;
int T, N, M;
long long dp[MAX][MAX] = {0, };
int site(int n, int m) {
if (n == 1)
return dp[1][m];
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i == j) dp[i][j] = 1; //N, M의 값이 같을 때, 경우의 수는 오직 1개만 존재함
else if (i < j) {
dp[i][j] = dp[i][j - 1] + dp[i - 1][j - 1];
}
}
}
return dp[n][m];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> T;
for (int i = 0; i < T; i++) {
cin >> N >> M;
for (int i = 1; i <= M; i++) {
dp[1][i] = i; //N = 1일 때, 경우의 수는 M의 값을 따름
}
int re = site(N, M);
cout << re << '\n';
}
return 0;
}
<결과>
2022.12.18
'Baekjoon' 카테고리의 다른 글
[백준 DP] 11057번 - 오르막 수 (0) | 2022.12.22 |
---|---|
[백준 DP] 12865번 - 평범한 배낭 (0) | 2022.12.19 |
[백준 DP] 2156번 - 포도주 시식 (0) | 2022.12.18 |
[백준 DP] 10844번 - 쉬운 계단 수 (0) | 2022.11.26 |
[백준 DP] 1912번 - 연속합 (2) | 2022.11.25 |