오늘 학원에서 써먹은 개념을 그대로 쓸수 있었던 문제
nHr 중복조합을 구현하면 되는 문제이다.
0<=x 들을 K개 더해서 N를 만드는 nHr의 기본 형태이다
nHr = (n+r-1)C(r) 임을 이용하면 되는데,
구현은 워낙 간단한 DP여서 생략하도록 하겠다.
2225번: 합분해
첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
더보기
#include <bits/stdc++.h>
#define MOD 1000000000
using namespace std;
int dp[512][512] = {0};
int nCr(int n, int r){
if(n==r) return dp[n][r] = 1;
if(r==0) return dp[n][r] = 1;
if(dp[n][r] != 0) return dp[n][r] % MOD;
return dp[n][r] = (nCr(n-1,r-1) + nCr(n-1,r)) % MOD;
}
int main(){
int n,r;
scanf("%d %d", &n, &r);
nCr(n+r-1, r-1);
printf("%d", dp[n+r-1][r-1] % MOD);
return 0;
}
반응형