세상에 나쁜 코드는 없다
[백준] 1010번: 다리 놓기 본문
사실상 mCn 을 구하는 문제인데, mCn 을 구하는 공식 mPn / n!을 통해서는 문제의 해답을 구할 수 없다. 문제 조건인 N <= M < 29에서 나올수 있는 최대 수인 29P29는 8.841762e+30 으로 자료형이 가질 수 있는 범위를 한참 넘어 버린다. 따라서 이 문제는 nCr = n-1Cr-1 + n-1Cr 이라는 식을 사용해서 해결해야 했다.
#include <iostream>
using namespace std;
// m,n 의 조합 수 mCn
int memo[30][30];
void computeCombination()
{
for(int i=1; i<30; i++)
{
memo[i][1] = i;
}
for(int j=2; j<30; j++)
{
for(int i=2; i<30; i++)
{
memo[i][j] = memo[i-1][j] + memo[i-1][j-1];
}
}
}
int main() {
computeCombination();
int t,n,m;
cin >> t;
for(int i=0; i<t; i++)
{
cin >> n >> m;
cout << memo[m][n] << endl;
}
}
'Computer Science > Problem Solving' 카테고리의 다른 글
[백준] 2667번 : 단지번호붙이기 (실버I) (0) | 2021.05.17 |
---|---|
[백준] 1012번: 유기농 배추~ (0) | 2021.05.06 |
[백준] 1003번 : 피보나치 함수 (0) | 2021.04.27 |
[백준] 1149번: RGB거리 - 드디어 dp 해결 (0) | 2021.04.06 |
[백준] 2630번: 색종이 만들기 (0) | 2021.03.10 |