문제풀이/백준oj

[백준OJ] 11051번 이항 계수 2

Hyeon-Uk 2021. 7. 7. 16:36
반응형

https://www.acmicpc.net/problem/11051

 

11051번: 이항 계수 2

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net


 

-풀이-

이항계수의 성질을 알면 dp를 이용하여 쉽게 풀 수 있다. dp[n][r]=k라고할때, nCr = k개 라는 뜻이다.

nCr 이라고 할때

1) n==r 또는 r==0 이면, dp[n][r]=1 이 된다.

2) 1번의 경우가 아닌경우는, dp[n][r]=dp[n-1][r-1]+dp[n-1][r] 이 된다.

 

-시간복잡도-

O(nr) 이 된다.

 

-코드-

#include <algorithm>
#include<iostream>
#define MOD 10007
using namespace std;

int dp[1001][1001]={0};
int n,k;

int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=i;j++){
            if(j==0||j==i){
                dp[i][j]=1;
            }
            else{
                dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%MOD;
            }
        }
    }
    cout<<dp[n][k];
}
반응형