#include <stdio.h>
#define max(a,b) (a > b ? a : b)
int matrix[100][100] = {0};
int knapsack(int index, int size, int weights[],int values[]){
int take,dontTake;
take = dontTake = 0;
if (matrix[index][size]!=0)
return matrix[index][size];
if (index==0){
if (weights[0]<=size){
matrix[index][size] = values[0];
return values[0];
}
else{
matrix[index][size] = 0;
return 0;
}
}
if (weights[index]<=size)
take = values[index] + knapsack(index-1, size-weights[index], weights, values);
dontTake = knapsack(index-1, size, weights, values);
matrix[index][size] = max (take, dontTake);
return matrix[index][size];
}
int main(){
int nItems = 4;
int knapsackSize = 10;
int weights[4] = {5,4,6,3};
int values[4] = {1,1,1,1};
printf("Max value = %dn",knapsack(nItems-1,knapsackSize,weights,values));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgbWF4KGEsYikgKGEgPiBiID8gYSA6IGIpCgppbnQgbWF0cml4WzEwMF1bMTAwXSA9IHswfTsKCmludCBrbmFwc2FjayhpbnQgaW5kZXgsIGludCBzaXplLCBpbnQgd2VpZ2h0c1tdLGludCB2YWx1ZXNbXSl7CiAgICBpbnQgdGFrZSxkb250VGFrZTsKCiAgICB0YWtlID0gZG9udFRha2UgPSAwOwoKICAgIGlmIChtYXRyaXhbaW5kZXhdW3NpemVdIT0wKQogICAgICAgIHJldHVybiBtYXRyaXhbaW5kZXhdW3NpemVdOwoKICAgIGlmIChpbmRleD09MCl7CiAgICAgICAgaWYgKHdlaWdodHNbMF08PXNpemUpewogICAgICAgICAgICBtYXRyaXhbaW5kZXhdW3NpemVdID0gdmFsdWVzWzBdOwogICAgICAgICAgICByZXR1cm4gdmFsdWVzWzBdOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBtYXRyaXhbaW5kZXhdW3NpemVdID0gMDsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIGlmICh3ZWlnaHRzW2luZGV4XTw9c2l6ZSkKICAgICAgICB0YWtlID0gdmFsdWVzW2luZGV4XSArIGtuYXBzYWNrKGluZGV4LTEsIHNpemUtd2VpZ2h0c1tpbmRleF0sIHdlaWdodHMsIHZhbHVlcyk7CgogICAgZG9udFRha2UgPSBrbmFwc2FjayhpbmRleC0xLCBzaXplLCB3ZWlnaHRzLCB2YWx1ZXMpOwoKICAgIG1hdHJpeFtpbmRleF1bc2l6ZV0gPSBtYXggKHRha2UsIGRvbnRUYWtlKTsKCiAgICByZXR1cm4gbWF0cml4W2luZGV4XVtzaXplXTsKCn0KCmludCBtYWluKCl7CiAgICBpbnQgbkl0ZW1zID0gNDsKICAgIGludCBrbmFwc2Fja1NpemUgPSAxMDsKICAgIGludCB3ZWlnaHRzWzRdID0gezUsNCw2LDN9OwogICAgaW50IHZhbHVlc1s0XSA9IHsxLDEsMSwxfTsKCiAgICBwcmludGYoIk1heCB2YWx1ZSA9ICVkbiIsa25hcHNhY2sobkl0ZW1zLTEsa25hcHNhY2tTaXplLHdlaWdodHMsdmFsdWVzKSk7CgogICAgcmV0dXJuIDA7Cn0=