#include <iostream>
#include <vector>
using namespace std;
class Knapsack{
private :
vector< int > weights;
vector< int > values;
int n, w;
//int **v;
vector< vector< int > > v;
public :
Knapsack( vector< int > wt, vector< int > val, int n, int cap) {
// Сохранение переданных векторов, числа элементов и вместимости ранца
weights.assign ( wt.begin ( ) , wt.end ( ) ) ;
values.assign ( val.begin ( ) , val.end ( ) ) ;
this- > n = n;
this- > w = cap;
// Создание таблицы мемоизации и заполнение начальными значениями
/*v = new int * [n];
for(int i = 0; i < n; i++)
v[i] = new int [w];*/
v = vector< n, vector< int > ( w) ) ;
// Инициализирование таблицы
for ( int i = 0 ; i < n; i++ )
for ( int j = 0 ; j < w; j++ )
v[ i] [ j] = - 1 ;
// Инициализирование нулями первой строки и первого столбца
for ( int i = 0 ; i < w; i++ )
v[ 0 ] [ i] = 0 ;
for ( int i = 0 ; i < n; i++ )
v[ i] [ 0 ] = 0 ;
}
~Knapsack( ) {
//for(int i = 0; i < n; i++)
// delete[] v[i];
//delete[] v;
}
int knapsack_solver( int i, int j) ;
int solve( ) ;
} ;
int Knapsack:: knapsack_solver ( int i, int j) {
int value;
if ( v[ i] [ j] < 0 ) {
if ( j < weights[ i] )
value = knapsack_solver( i - 1 , j) ;
else
value = max( knapsack_solver( i - 1 , j) ,
values[ i] + knapsack_solver( i - 1 , j - weights[ i] ) ) ;
v[ i] [ j] = value;
}
return v[ i] [ j] ;
}
int Knapsack:: solve ( ) {
return knapsack_solver( n, w) ;
}
int main( ) {
int n = 4 , cap = 5 ;
int w[ 4 ] = { 2 , 1 , 3 , 2 } ;
int v[ 4 ] = { 12 , 10 , 20 , 15 } ;
vector< int > wt( w, w + 4 ) ;
vector< int > val( v, v + 4 ) ;
Knapsack knap( wt, val, n, cap) ;
cout << knap.solve ( ) << endl;
int pause;
cin >> pause;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIEtuYXBzYWNrewpwcml2YXRlOgoJdmVjdG9yPGludD4gd2VpZ2h0czsKCXZlY3RvcjxpbnQ+IHZhbHVlczsKCWludCBuLCB3OwoJLy9pbnQgKip2OwoJdmVjdG9yPCB2ZWN0b3I8aW50PiA+IHY7CnB1YmxpYzoKCUtuYXBzYWNrKHZlY3RvcjxpbnQ+IHd0LCB2ZWN0b3I8aW50PiB2YWwsIGludCBuLCBpbnQgY2FwKXsKCQkvLyDQodC+0YXRgNCw0L3QtdC90LjQtSDQv9C10YDQtdC00LDQvdC90YvRhSDQstC10LrRgtC+0YDQvtCyLCDRh9C40YHQu9CwINGN0LvQtdC80LXQvdGC0L7QsiDQuCDQstC80LXRgdGC0LjQvNC+0YHRgtC4INGA0LDQvdGG0LAKCQl3ZWlnaHRzLmFzc2lnbih3dC5iZWdpbigpLCB3dC5lbmQoKSk7CgkJdmFsdWVzLmFzc2lnbih2YWwuYmVnaW4oKSwgdmFsLmVuZCgpKTsKCQl0aGlzLT5uID0gbjsKCQl0aGlzLT53ID0gY2FwOwoJCS8vINCh0L7Qt9C00LDQvdC40LUg0YLQsNCx0LvQuNGG0Ysg0LzQtdC80L7QuNC30LDRhtC40Lgg0Lgg0LfQsNC/0L7Qu9C90LXQvdC40LUg0L3QsNGH0LDQu9GM0L3Ri9C80Lgg0LfQvdCw0YfQtdC90LjRj9C80LgKCQkvKnYgPSBuZXcgaW50ICogW25dOwoJCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJCXZbaV0gPSBuZXcgaW50IFt3XTsqLwoJCXYgPSB2ZWN0b3I8biwgdmVjdG9yPGludD4odykpOwoJCS8vINCY0L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdC40LUg0YLQsNCx0LvQuNGG0YsKCQlmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCQlmb3IoaW50IGogPSAwOyBqIDwgdzsgaisrKQoJCQkJdltpXVtqXSA9IC0xOwoJCS8vINCY0L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdC40LUg0L3Rg9C70Y/QvNC4INC/0LXRgNCy0L7QuSDRgdGC0YDQvtC60Lgg0Lgg0L/QtdGA0LLQvtCz0L4g0YHRgtC+0LvQsdGG0LAKCQlmb3IoaW50IGkgPSAwOyBpIDwgdzsgaSsrKQoJCQl2WzBdW2ldID0gMDsKCQlmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCQl2W2ldWzBdID0gMDsKCX0KCX5LbmFwc2FjaygpewoJCS8vZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCQkvLwlkZWxldGVbXSB2W2ldOwoJCS8vZGVsZXRlW10gdjsKCX0KCglpbnQga25hcHNhY2tfc29sdmVyKGludCBpLCBpbnQgaik7CglpbnQgc29sdmUoKTsKfTsKCmludCBLbmFwc2Fjazo6a25hcHNhY2tfc29sdmVyKGludCBpLCBpbnQgail7CglpbnQgdmFsdWU7CglpZih2W2ldW2pdIDwgMCl7CgkJaWYoaiA8IHdlaWdodHNbaV0pCgkJCXZhbHVlID0ga25hcHNhY2tfc29sdmVyKGkgLSAxLCBqKTsKCQllbHNlCgkJCXZhbHVlID0gbWF4KGtuYXBzYWNrX3NvbHZlcihpIC0gMSwgaiksCgkJCQkJCXZhbHVlc1tpXSArIGtuYXBzYWNrX3NvbHZlcihpIC0gMSwgaiAtIHdlaWdodHNbaV0pKTsKCQl2W2ldW2pdID0gdmFsdWU7Cgl9CglyZXR1cm4gdltpXVtqXTsKfQoKaW50IEtuYXBzYWNrOjpzb2x2ZSgpewoJcmV0dXJuIGtuYXBzYWNrX3NvbHZlcihuLCB3KTsKfQoKaW50IG1haW4oKXsKCWludCBuID0gNCwgY2FwID0gNTsKCWludCB3WzRdID0gezIsIDEsIDMsIDJ9OwoJaW50IHZbNF0gPSB7MTIsIDEwLCAyMCwgMTV9OwoJdmVjdG9yPGludD4gd3QodywgdyArIDQpOwoJdmVjdG9yPGludD4gdmFsKHYsIHYgKyA0KTsKCglLbmFwc2FjayBrbmFwKHd0LCB2YWwsIG4sIGNhcCk7Cgljb3V0IDw8IGtuYXAuc29sdmUoKSA8PCBlbmRsOwoKCWludCBwYXVzZTsKCWNpbiA+PiBwYXVzZTsKCglyZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In constructor 'Knapsack::Knapsack(std::vector<int>, std::vector<int>, int, int)':
prog.cpp:24:30: error: temporary of non-literal type 'std::vector<int>' in a constant expression
v = vector<n, vector<int>(w));
^
In file included from /usr/include/c++/5/vector:64:0,
from prog.cpp:2:
/usr/include/c++/5/bits/stl_vector.h:214:11: note: 'std::vector<int>' is not literal because:
class vector : protected _Vector_base<_Tp, _Alloc>
^
/usr/include/c++/5/bits/stl_vector.h:214:11: note: 'std::vector<int>' has a non-trivial destructor
prog.cpp:24:30: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp, class _Alloc> class std::vector'
v = vector<n, vector<int>(w));
^
prog.cpp:24:30: note: expected a type, got 'n'
prog.cpp:24:30: error: type/value mismatch at argument 2 in template parameter list for 'template<class _Tp, class _Alloc> class std::vector'
prog.cpp:24:30: note: expected a type, got 'std::vector<int>(((std::vector<int>::size_type)((Knapsack*)this)->Knapsack::w), std::allocator<int>())'
stdout