반응형
https://www.acmicpc.net/problem/11051
dp로 푼 문제였습니다.
풀이방법
D[i][j] = nCk;
D[i][j] = D[i-1][j-1] + D[i-1][j]
Code
1. bottom up
#include <iostream>
using namespace std;
long long D[1001][1001],N,K;
int main() {
cin >> N >> K;
D[1][0] = D[1][1] = 1;
for (int i = 2; i <= N; i++)
{
for (int j = 0; j <= K; j++)
{
D[i][j] += D[i - 1][j - 1] %10007;
if (i - 1 >= j)
D[i][j] += D[i - 1][j]%10007;
}
}
cout << D[N][K] % 10007;
}
2. top down
#include <bits/stdc++.h>
#define MOD 10007
using namespace std;
int n,k,a[1001][1001];
//nCk = n-1Ck + n-1Ck-1
int dp(int n, int k){
if(n == k || k == 0) return 1;
int &ret = a[n][k];
if(ret) return ret;
ret = (dp(n-1,k) % MOD) + (dp(n-1,k-1) % MOD);
return ret % MOD;
}
int main(){
cin >> n >> k;
cout << dp(n,k);
}
'Algorithm > DP(Dynamic Programing)' 카테고리의 다른 글
(C++) - 백준(BOJ) 11660번 : 구간 합 구하기 5 (0) | 2017.03.24 |
---|---|
(C++) - 백준(BOJ)코딩 1149번 : RGB거리 (0) | 2017.02.13 |
(C++) - 백준(BOJ)코딩 2579번 : 계단오르기 답 (0) | 2017.01.29 |
(C++, Python3) - 백준(BOJ) 11055번 :가장 큰 증가 부분 수열 답 (0) | 2017.01.27 |
(C++) - 백준(BOJ) 13699번 : 점화식 (0) | 2016.11.15 |