typedef long long ll;
ll cache[MAX_N][MAX_N];
//use dp
ll comb(int n,int r)
{
if(r==0||n==r)return 1;
ll&ret=cache[n][r];
if(ret!=-1)return ret;
return ret=comb(n-1,r-1)+comb(n-1,r);
}
//if n is small
ll comb(int n,int r)
{
if(r==0||n==r)return 1;
return comb(n-1,r-1)+comb(n-1,r);
}
nCr=(n-1)C(r-1)+(n-1)Cr
점화식을 이용한 간단한 재귀함수이다.
경우의 수의 특성상 수가 조금만 커져도 int범위를 간단히 넘어버리니 왠만한 경우에는 long long 을 선언해서
풀어주어야 한다.
'📑코드 포스트잇' 카테고리의 다른 글
네트워크 플로우(일반적 구현, 구조체로 구현) (0) | 2020.02.19 |
---|---|
여러개의 숫자 한줄로 받아 따로 저장하기 (1) | 2020.02.18 |
조합:n개의 원소 중 m개를 고르자 (0) | 2020.01.09 |
펜윅 트리 (0) | 2020.01.09 |
그래프의 간선구분, 사이클 존재 여부 판단 (0) | 2020.01.09 |