
문제에서 핵심은 '겹치지 않게' 다리를 짓는 것이다

바로 조합을 이용하면 된다
전에 [이항 계수 2]에서 풀었던 동적 계획법 코드를 가져왔다
https://kmyobin.tistory.com/53
[11051] 이항 계수 2
원래는 팩토리얼로 문제를 풀었으나, N의 범위가 커지면서 쓸 수 없게 되었다 그래서 알고리즘 설계 때 배운 DP(동적 프로그래밍)을 떠올리며 문제를 풀었다 ( 시험에서는 틀렸다 ㅡㅡ ) DP(Dynamic P
kmyobin.tistory.com
그렇게 완성된 코드는 아래와 같다
#include <iostream>
using namespace std;
int T, N, M;
int dp[31][31];
int f(int n, int k) {
for (int i = 0; i <= n; i++) {
dp[i][0] = 1;
}
for (int i = 0; i <= k; i++) {
dp[i][i] = 1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]);
}
}
return dp[n][k];
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
f(30, 30); // 미리 구해놓고 시작
cin >> T;
for (int i = 0; i < T; i++)
{
cin >> N >> M;
printf("%d\n", dp[M][N]);
}
}

'백준' 카테고리의 다른 글
[1676] 팩토리얼 0의 개수 (0) | 2022.09.03 |
---|---|
[9375] 패션왕 신해빈 (0) | 2022.08.29 |
[11051] 이항 계수 2 (0) | 2022.08.27 |
[11050] 이항 계수 1 (0) | 2022.08.25 |
[3036] 링 (0) | 2022.08.25 |
댓글