#include <stdio.h>
#define min(a,b) (a < b ? a : b)
#define INF 10000000
int matrix[100][100] = {0};
int knapsack(int index, int size, int weights[],int values[]){
int take = INF;
if (index == -1){
if(size == 0) return 0;
else return INF;
}
if (matrix[index][size]!=-1)
return matrix[index][size];
for(int itemcount = 0;(itemcount * weights[index]) <= size;itemcount++){
if ((weights[index] * itemcount) <= size)
take = min(take, (values[index] * itemcount) + knapsack(index - 1, size - (itemcount * weights[index]), weights, values)); //knapsack(index) and not //knapsack(index-1)
}
matrix[index][size] = take;
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};
for(int i = 0;i < 100;i++) for(int j = 0;j < 100;j++) matrix[i][j] = -1;
printf("Min value = %d\n",knapsack(nItems-1,knapsackSize,weights,values));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgbWluKGEsYikgKGEgPCBiID8gYSA6IGIpCiNkZWZpbmUgSU5GIDEwMDAwMDAwCgppbnQgbWF0cml4WzEwMF1bMTAwXSA9IHswfTsKCmludCBrbmFwc2FjayhpbnQgaW5kZXgsIGludCBzaXplLCBpbnQgd2VpZ2h0c1tdLGludCB2YWx1ZXNbXSl7CiAgICBpbnQgdGFrZSA9IElORjsKCiAgICBpZiAoaW5kZXggPT0gLTEpewogICAgICAgIGlmKHNpemUgPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgZWxzZSByZXR1cm4gSU5GOwogICAgfQoKICAgIGlmIChtYXRyaXhbaW5kZXhdW3NpemVdIT0tMSkKICAgICAgICByZXR1cm4gbWF0cml4W2luZGV4XVtzaXplXTsKCiAgICBmb3IoaW50IGl0ZW1jb3VudCA9IDA7KGl0ZW1jb3VudCAqIHdlaWdodHNbaW5kZXhdKSA8PSBzaXplO2l0ZW1jb3VudCsrKXsKICAgICAgICBpZiAoKHdlaWdodHNbaW5kZXhdICogaXRlbWNvdW50KSA8PSBzaXplKSAKICAgICAgICAgICAgdGFrZSA9IG1pbih0YWtlLCAodmFsdWVzW2luZGV4XSAqIGl0ZW1jb3VudCkgKyBrbmFwc2FjayhpbmRleCAtIDEsIHNpemUgLSAoaXRlbWNvdW50ICogd2VpZ2h0c1tpbmRleF0pLCB3ZWlnaHRzLCB2YWx1ZXMpKTsgLy9rbmFwc2FjayhpbmRleCkgYW5kIG5vdCAvL2tuYXBzYWNrKGluZGV4LTEpIAogICAgfQoKICAgIG1hdHJpeFtpbmRleF1bc2l6ZV0gPSB0YWtlOwoKICAgIHJldHVybiBtYXRyaXhbaW5kZXhdW3NpemVdOwoKfQoKaW50IG1haW4oKXsKICAgIGludCBuSXRlbXMgPSA0OwogICAgaW50IGtuYXBzYWNrU2l6ZSA9IDEwOwogICAgaW50IHdlaWdodHNbNF0gPSB7NSw0LDYsM307CiAgICBpbnQgdmFsdWVzWzRdID0gezEsMSwxLDF9OwogICAgZm9yKGludCBpID0gMDtpIDwgMTAwO2krKykgZm9yKGludCBqID0gMDtqIDwgMTAwO2orKykgbWF0cml4W2ldW2pdID0gLTE7CgogICAgcHJpbnRmKCJNaW4gdmFsdWUgPSAlZFxuIixrbmFwc2FjayhuSXRlbXMtMSxrbmFwc2Fja1NpemUsd2VpZ2h0cyx2YWx1ZXMpKTsKCiAgICByZXR1cm4gMDsKfQ==