Advertisement
Guest User

Talent show knapsack

a guest
Dec 16th, 2020
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. namespace cp {
  5.    #define REP(i, x) for (int i = 0; i < (x); i++)
  6.    #define pb push_back
  7.    #define ins insert
  8.    #define sz(x) (int)(x).size()
  9.    #define all(x) (x).begin(), (x).end()
  10.    typedef long long ll;
  11.    typedef vector<int> vi;
  12.  
  13.    void setUsacoIO(string name) {
  14.        ios::sync_with_stdio(false);
  15.        cin.tie(0);
  16.        freopen((name + ".in").c_str(), "r", stdin);
  17.        freopen((name + ".out").c_str(), "w", stdout);
  18.    }
  19. }
  20. using namespace cp;
  21.  
  22. const int MXN = 255;
  23. const int MXW = 250 * 1000 + 5;
  24. int n, W;
  25. int w[MXN], t[MXN];
  26. int dp[MXW];
  27.  
  28. int main() {
  29.     setUsacoIO("talent");
  30.  
  31.     cin >> n >> W;
  32.     REP (i, n) {
  33.         cin >> w[i] >> t[i];
  34.     }
  35.    
  36.     memset(dp, -1, sizeof(dp));
  37.     dp[0] = 0;
  38.     for (int j = 0; j < n; j++) {
  39.         for (int i = MXW - 1; i >= 0; i--) {
  40.             if (dp[i] == -1) continue;
  41.             if (i + w[j] < MXW) {
  42.                 dp[i + w[j]] = max(dp[i + w[j]], dp[i] + t[j]);
  43.             }
  44.         }
  45.     }
  46.    
  47.     int ret = 0;
  48.     for (int i = W; i < MXW; i++) {
  49.         ret = max(ret, (dp[i] * 1000) / i);
  50.     }
  51.    
  52.     cout << ret << endl;
  53.    
  54.     return 0;
  55. }
  56.  
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement