Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int memo[1005][1005], n, valor[1005], peso[1005];
  6.  
  7. int mochila(int pos, int pesorestante){
  8.     if(pos == n) return 0;
  9.  
  10.     if(memo[pos][pesorestante] != -1) return memo[pos][pesorestante];
  11.  
  12.     int r1 = mochila(pos+1, pesorestante);
  13.     int r2 = 0;
  14.     if(peso[pos] <= pesorestante){
  15.         r2 = valor[pos] + mochila(pos+1, pesorestante-peso[pos]);
  16.     }
  17.     return memo[pos][pesorestante] = max(r1,r2);
  18. }
  19. int main(){
  20.     int cap;
  21.     while(~scanf("%d%d",&n,&cap)){
  22.         memset(memo, -1, sizeof memo);
  23.         for(int i=0;i<n;i++) scanf("%d",&valor[i]);
  24.  
  25.         for(int i=0;i<n;i++) scanf("%d",&peso[i]);
  26.  
  27.         printf("%d\n",mochila(0,cap));
  28.     }
  29.     return 0;
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement