//0-1 Knapsack problem - Dynamic programming //#include #include using namespace std; //void Print(int res[20][20], int i, int j, int capacity) //{ // if(i==0 || j==0) // { // return; // } // if(res[i-1][j]==res[i][j-1]) // { // if(i<=capacity) // { // cout<res[i][j-1]) // { // Print(res, i-1,j, capacity); // } // else if(res[i][j-1]>res[i-1][j]) // { // Print(res, i,j-1, capacity); // } //} int Knapsack(int capacity,int n,int weight[],int value[]){ int res[20][20]; for (int i = 0; i < n+1; ++i) { for (int j = 0; j < capacity+1; ++j) { if(i==0||j==0) res[i][j] = 0; else if(weight[i-1]<=j) res[i][j] = max(value[i-1]+res[i-1][j-weight[i-1]], res[i-1][j]); else res[i][j] = res[i-1][j]; } } // Print(res, n, capacity, capacity); // cout<<"\n"; return res[n][capacity]; } int main() { int n; cout<<"Enter number of items: "; cin>>n; int weight[n], value[n]; cout<<"Enter weights: "; for (int i = 0; i < n; ++i) { cin>>weight[i]; } cout<<"Enter values: "; for (int i = 0; i < n; ++i) { cin>>value[i]; } int capacity; cout<<"Enter capacity: "; cin>>capacity; cout<