Monday, April 8, 2019

[Codeforces] C. k-Tree

Author            : Dipu Kumar Mohanto 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : C. k-Tree
Source            : Codeforces
Category          : Dynamic Programing
Algorithm         : Basic Dynamic Programing
Verdict           : Accepted

  1. #include <bits/stdc++.h>  
  2.   
  3. using namespace std;  
  4.   
  5. static const int maxn = 100 + 5;  
  6. static const int mod = (int)1e9+7;  
  7.   
  8. int add(int a, int b)  
  9. {  
  10.       a += b;  
  11.       if (a >= mod) a -= mod;  
  12.       return a;  
  13. }  
  14.   
  15. int dp[maxn][2];  
  16. bool memoize[maxn][2];  
  17. int n, k, d;  
  18.   
  19. int solve(int sum = 0, bool flag = 0)  
  20. {  
  21.       if (sum == n) return flag;  
  22.       if (sum > n) return 0;  
  23.       int &ret = dp[sum][flag];  
  24.       bool &mem = memoize[sum][flag];  
  25.       if (mem) return ret;  
  26.       mem = 1;  
  27.       ret = 0;  
  28.       for (int weight = 1; weight <= k; weight++)  
  29.       {  
  30.             ret = add(ret, solve(sum + weight, flag | weight >= d));  
  31.       }  
  32.       return ret;  
  33. }  
  34.   
  35. int main()  
  36. {  
  37.       ios_base::sync_with_stdio(false);  
  38.       cin.tie(NULL);  
  39.       cout << fixed << setprecision(15);  
  40.       #ifndef ONLINE_JUDGE  
  41.             freopen("in.txt""r", stdin);  
  42.       #endif // ONLINE_JUDGE  
  43.   
  44.       cin >> n >> k >> d;  
  45.       cout << solve(0, 0) << '\n';  
  46. }  

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.