Guest User

Untitled

a guest
Jun 26th, 2020
471
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define X ios_base::sync_with_stdio(false); cin.tie(NULL);
  4.  
  5.  
  6. typedef long long ll;
  7. typedef vector<int> VI;
  8. typedef vector<ll> VL;
  9. typedef vector<bool> VB;
  10. typedef vector<string> VS;
  11. typedef pair<ll, ll> pl;
  12. typedef unordered_map<ll, ll> UMP;
  13. #define FOR(i,b) for(i=0;i<b;i++)
  14. #define pb push_back
  15.  
  16. int main(){
  17.     ll n,i,x,j;
  18.     cin>>n>>x;
  19.     // x++;
  20.     VL cost(n);
  21.     VL pages(n);
  22.     vector<pl> zip_(n);
  23.     FOR(i,n){cin>>cost[i];}
  24.     FOR(i,n){
  25.         cin>>pages[i];
  26.         pl tmpp = make_pair(cost[i], pages[i]);
  27.         zip_[i] = tmpp;
  28.     }
  29.     sort(zip_.begin(), zip_.end());
  30.     // debug(zip_);
  31.  
  32.     vector<VL> dp(x+1, vector<ll>(n,0));
  33.    
  34.     FOR(i,n){
  35.         dp[0][i]=0;
  36.     }
  37.  
  38.     for(i=0;i<=x;i++){
  39.         // debug(i);
  40.         for(j=0;j<n;j++){
  41.             if(zip_[j].first>i){break;}
  42.             if(j==0){dp[i][j] = max(dp[i][j], zip_[j].second);}
  43.            
  44.             else{
  45.                 dp[i][j] = max(dp[i][j-1], dp[i][j]);
  46.                 dp[i][j] = max(dp[i][j], zip_[j].second+dp[i-zip_[j].first][j-1]);
  47.             }
  48.             // debug(i,j,dp[i][j]);
  49.         }
  50.     }
  51.     // debug(dp);
  52.     cout<<dp[x][n-1]<<endl;
  53. }
Add Comment
Please, Sign In to add comment