Advertisement
Josif_tepe

Untitled

Oct 31st, 2022
653
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     // dp[x] --> the number of ways such that we have used x candies till this level
  8.     int n, k;
  9.     cin >> n >> k;
  10.    
  11.     vector<int> v(n);
  12.     for(int i = 0; i < n; i++) {
  13.         cin >> v[i];
  14.     }
  15.     vector<int> dp(k + 1, 0);
  16.     dp[0] = 1;
  17.     int MOD = 1e9 + 7;
  18.     for(int i = 0; i < n; i++) {
  19.         vector<int> pref_sum(k + 1, 0);
  20.         for(int j = k; j >= 0; j--) {
  21.  
  22.             int L = j + 1;
  23.             int R = j + min(v[i], k - j);
  24.             if(L <= R) {
  25.                 pref_sum[L] += dp[j];
  26.                 pref_sum[L] %= MOD;
  27.                 if(R + 1 <= k) {
  28.                     pref_sum[R + 1] -= dp[j];
  29.                     if(pref_sum[R + 1] < 0) {
  30.                         pref_sum[R + 1] += MOD;
  31.                     }
  32.                 }
  33.                
  34.             }
  35.         }
  36.         int sum = 0;
  37.         for(int c = 0; c <= k; c++) {
  38.             sum += pref_sum[c];
  39.             sum %= MOD;
  40.             dp[c] += sum;
  41.             dp[c] %= MOD;
  42.         }
  43.     }
  44.     cout << dp[k] << endl;
  45.     return 0;
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement