백준
[1010] 다리 놓기
kmyobin
2022. 8. 28. 16:30
문제에서 핵심은 '겹치지 않게' 다리를 짓는 것이다
바로 조합을 이용하면 된다
전에 [이항 계수 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]);
}
}