#include <bits/stdc++.h>
using namespace std;
void printknapSack( int W, int wt[ ] , int val[ ] , int n)
{
int i, w;
int K[ n + 1 ] [ W + 1 ] ;
for ( i = 0 ; i <= n; i++ )
{
for ( w = 0 ; w <= W; w++ )
{
if ( i == 0 || w == 0 )
{
K[ i] [ w] = 0 ;
}
else if ( wt[ i - 1 ] <= w)
{
K[ i] [ w] = max( val[ i - 1 ] + K[ i - 1 ] [ w - wt[ i - 1 ] ] , K[ i - 1 ] [ w] ) ;
}
else
{
K[ i] [ w] = K[ i - 1 ] [ w] ;
}
}
}
int res = K[ n] [ W] ;
cout << endl<< "Max-Profit: " << res << endl;
cout << endl<< "The Items are: " << endl<< endl;
w = W;
for ( i = n; i > 0 && res > 0 ; i-- )
{
if ( res == K[ i - 1 ] [ w] )
continue ;
else
{
cout << "Item Number: " << i << " and Weight: " << wt[ i - 1 ] << endl;
res = res - val[ i - 1 ] ;
w = w - wt[ i - 1 ] ;
}
}
}
int main( )
{
int nbag,wt,w;
cout << "Enter the number of bags: " ;
cin >> nbag;
int values[ nbag] ;
cout << "Enter the values: " ;
for ( int i= 0 ; i< nbag; i++ ) {
cin >> values[ i] ;
}
int weight[ nbag] ;
cout << "Enter the weights of bags: " ;
for ( int i= 0 ; i< nbag; i++ ) {
cin >> weight[ i] ;
}
cout << "Enter the maximum weight of the bag: " ;
cin >> w;
int n = sizeof ( values) / sizeof ( values[ 0 ] ) ;
printknapSack( w, weight, values, n) ;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHByaW50a25hcFNhY2soaW50IFcsIGludCB3dFtdLCBpbnQgdmFsW10sIGludCBuKQp7CiAgICBpbnQgaSwgdzsKICAgIGludCBLW24gKyAxXVtXICsgMV07CgogICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yICh3ID0gMDsgdyA8PSBXOyB3KyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoaSA9PSAwIHx8IHcgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS1tpXVt3XSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAod3RbaSAtIDFdIDw9IHcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtbaV1bd10gPSBtYXgodmFsW2kgLSAxXSArIEtbaSAtIDFdW3cgLSB3dFtpIC0gMV1dLCBLW2kgLSAxXVt3XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS1tpXVt3XSA9IEtbaSAtIDFdW3ddOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGludCByZXMgPSBLW25dW1ddOwogICAgY291dCA8PGVuZGw8PCAiTWF4LVByb2ZpdDogIiA8PCByZXMgPDwgZW5kbDsKICAgIGNvdXQgPDxlbmRsPDwgIlRoZSBJdGVtcyBhcmU6ICI8PGVuZGw8PGVuZGw7CgogICAgdyA9IFc7CiAgICBmb3IgKGkgPSBuOyBpID4gMCAmJiByZXMgPiAwOyBpLS0pCiAgICB7CiAgICAgICAgaWYgKHJlcyA9PSBLW2kgLSAxXVt3XSkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCJJdGVtIE51bWJlcjogIiA8PGkgPDwgIiBhbmQgV2VpZ2h0OiAiPDx3dFtpIC0gMV0gPDxlbmRsOwogICAgICAgICAgICByZXMgPSByZXMgLSB2YWxbaSAtIDFdOwogICAgICAgICAgICB3ID0gdyAtIHd0W2kgLSAxXTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgaW50IG5iYWcsd3QsdzsKICAgIGNvdXQ8PCJFbnRlciB0aGUgbnVtYmVyIG9mIGJhZ3M6ICI7CiAgICBjaW4gPj4gbmJhZzsKICAgIGludCB2YWx1ZXNbbmJhZ107CiAgICBjb3V0PDwiRW50ZXIgdGhlIHZhbHVlczogIjsKICAgIGZvcihpbnQgaT0wOyBpPG5iYWc7IGkrKyl7CiAgICAgICAgY2luPj4gdmFsdWVzW2ldOwogICAgfQoKICAgIGludCB3ZWlnaHRbbmJhZ107CiAgICBjb3V0PDwiRW50ZXIgdGhlIHdlaWdodHMgb2YgYmFnczogIjsKICAgIGZvcihpbnQgaT0wOyBpPG5iYWc7IGkrKyl7CiAgICAgICAgY2luPj4gd2VpZ2h0W2ldOwogICAgfSAgICAKICAgIGNvdXQ8PCJFbnRlciB0aGUgbWF4aW11bSB3ZWlnaHQgb2YgdGhlIGJhZzogIjsKICAgIGNpbj4+dzsKCiAgICBpbnQgbiA9IHNpemVvZih2YWx1ZXMpIC8gc2l6ZW9mKHZhbHVlc1swXSk7CgogICAgcHJpbnRrbmFwU2Fjayh3LCB3ZWlnaHQsIHZhbHVlcywgbik7CgogICAgcmV0dXJuIDA7Cn0=