Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int memo[1005][1005], n, valor[1005], peso[1005];
- int mochila(int pos, int pesorestante){
- if(pos == n) return 0;
- if(memo[pos][pesorestante] != -1) return memo[pos][pesorestante];
- int r1 = mochila(pos+1, pesorestante);
- int r2 = 0;
- if(peso[pos] <= pesorestante){
- r2 = valor[pos] + mochila(pos+1, pesorestante-peso[pos]);
- }
- return memo[pos][pesorestante] = max(r1,r2);
- }
- int main(){
- int cap;
- while(~scanf("%d%d",&n,&cap)){
- memset(memo, -1, sizeof memo);
- for(int i=0;i<n;i++) scanf("%d",&valor[i]);
- for(int i=0;i<n;i++) scanf("%d",&peso[i]);
- printf("%d\n",mochila(0,cap));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement