DuongNhi99

GARD

Nov 28th, 2020 (edited)
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long nCr(int n, int r) {
  5.     r = min(r, n - r);
  6.  
  7.     if(r == 0) return 1;
  8.  
  9.     long long res = 1, k = 1;
  10.     while(r != 0) {
  11.         res *= n; k *= r;
  12.  
  13.         long long m = __gcd(res, k);
  14.         res /= m; k /= m;
  15.  
  16.         n--; r--;
  17.     }
  18.     return res;
  19. }
  20.  
  21. int n, k;
  22. long long dp[55];
  23.  
  24. long long solve(int p) {
  25.     if(p == 0) return 1;
  26.     if(dp[p] != 0) return dp[p];
  27.  
  28.     long long sum = 0;
  29.     for(int i = min(p, k); i >= 1; --i)
  30.         sum += nCr(p, i) * solve(p - i);
  31.  
  32.     return dp[p] = sum;
  33. }
  34.  
  35. int main()
  36. {
  37.     //freopen("GARD.inp", "r", stdin);
  38.     //freopen("GARD.out", "w", stdout);
  39.     ios_base::sync_with_stdio(false);
  40.     cin.tie(NULL); cout.tie(NULL);
  41.  
  42.     cin >> n >> k;
  43.     cout << solve(n) << '\n';
  44.  
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment