Advertisement
Josif_tepe

Untitled

Feb 1st, 2025
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. int N, W;
  6. int w[105], v[10005];
  7. ll dp[105][100005];
  8.  
  9. ll rec(int at, int value_left){
  10.    ll res = 2e9;
  11.    if(value_left == 0){
  12.        return 0;
  13.    }
  14.    if(at == N){
  15.        return 2e9;
  16.    }
  17.    if(dp[at][value_left] != -1){
  18.        return dp[at][value_left];
  19.    }
  20.    res = min(res, rec(at + 1, value_left));
  21.    if(value_left >= v[at]){
  22.        res = min(res, rec(at + 1, value_left - v[at]) + w[at]);
  23.    }
  24.    return dp[at][value_left] = res;
  25.  
  26. }
  27.  
  28. int main() {
  29.    int sum = 0;
  30.    cin >> N >> W;
  31.    for(int i = 0; i < N; i++){
  32.        cin >> w[i] >> v[i];
  33.        sum += v[i];
  34.    }
  35.    memset(dp, -1, sizeof(dp));
  36.    for(int i = sum; i > 0; i--){
  37.        if(rec(0, i) <= W){
  38.            cout << i << endl;
  39.            break;
  40.        }
  41.    }
  42.    
  43.    return 0;
  44. }
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement