Advertisement
mickypinata

SMMR-T106: Boost Up

May 6th, 2020
166
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. const int MOD = 1e9 + 7;
  6.  
  7. vector<int> ninja;
  8. int nf, target;
  9.  
  10. int KnapsackNinja(int n, int p){
  11.     if(p == 0){
  12.         return 1;
  13.     } else if(n == 0 && p != 0){
  14.         return 0;
  15.     } else {
  16.         int choose = (p >= ninja[n])? KnapsackNinja(n, p - ninja[n]) : 0;
  17.         int notchoose = KnapsackNinja(n - 1, p);
  18.         return (choose + notchoose) % MOD;
  19.     }
  20. }
  21.  
  22. int main(){
  23.  
  24.     scanf("%d %d", &nf, &target);
  25.     ninja.assign(nf + 1, 0);
  26.     for(int i = 1; i <= nf; ++i){
  27.         scanf("%d", &ninja[i]);
  28.     }
  29.  
  30.     vector<vector<int>> memo(nf + 1, vector<int>(target + 1, 0));
  31.     for(int n = 0; n <= nf; ++n){
  32.         for(int p = 0; p <= target; ++p){
  33.             if(p == 0){
  34.                 memo[n][p] = 1;
  35.             } else if(n == 0){
  36.                 continue;
  37.             } else {
  38.                 int choose = (ninja[n] > p)? 0 : memo[n][p - ninja[n]];
  39.                 int notchoose = memo[n - 1][p];
  40.                 memo[n][p] = (choose + notchoose) % MOD;
  41.             }
  42.         }
  43.     }
  44.  
  45.     cout << memo[nf][target];
  46.  
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement