문제 링크
풀이
dp를 이용하여 풀이할 수 있다.
dp [남은 수][뺄 수 있는 횟수]로 정의할 수 있다.
코드
#include <cstdio>
using ll = long long;
ll dp[202][202], N, K;
const ll mod = 1e9;
ll dpf(ll n, ll k) {
ll &ret = dp[k][n];
if (ret) return ret;
// 남은 수와 뺄 수 있는 횟수가 0일때 1리턴
if (!n && !k) return 1;
// 뺄 수 있는 횟수는 끝났는데 수가 남아있을 때 0리턴
if (n && !k) return 0;
for (ll i = 0; i <= n; i++) {
if (n - i >= 0) ret += dpf(n - i, k - 1) % mod;
}
return ret % mod;
}
int main() {
scanf("%lld %lld", &N, &K);
printf("%lld", dpf(N, K));
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[3648] 아이돌 (0) | 2021.08.06 |
---|---|
백준[5557] 1학년 (0) | 2021.08.04 |
백준[9084] 동전 (0) | 2021.08.04 |
백준[1915] 가장 큰 정사각형 (0) | 2021.08.04 |
백준[2602] 돌다리 건너기 (0) | 2021.08.03 |