Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- long long nCr(int n, int r) {
- r = min(r, n - r);
- if(r == 0) return 1;
- long long res = 1, k = 1;
- while(r != 0) {
- res *= n; k *= r;
- long long m = __gcd(res, k);
- res /= m; k /= m;
- n--; r--;
- }
- return res;
- }
- int n, k;
- long long dp[55];
- long long solve(int p) {
- if(p == 0) return 1;
- if(dp[p] != 0) return dp[p];
- long long sum = 0;
- for(int i = min(p, k); i >= 1; --i)
- sum += nCr(p, i) * solve(p - i);
- return dp[p] = sum;
- }
- int main()
- {
- //freopen("GARD.inp", "r", stdin);
- //freopen("GARD.out", "w", stdout);
- ios_base::sync_with_stdio(false);
- cin.tie(NULL); cout.tie(NULL);
- cin >> n >> k;
- cout << solve(n) << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment