#include <iostream>
#include <vector>
using namespace std;
class OneZeroPacket{
public:
OneZeroPacket(int wei, int nu, int *vl, int *wl):weight(wei),number(nu)
{
v = new int[number+1];
w = new int[number+1];
value = new int*[number+1];
for(int i=0; i<=number; i++)
value[i] = new int[weight+1];
for(int i=0; i<number; i++){
v[i+1]=vl[i];
w[i+1]=wl[i];
}
}
void count();
void show();
private:
int ** value;
int weight;
int number;
int *v;
int *w;
};
void
OneZeroPacket::count()
{
for(int i=0; i<=weight; i++)
value[0][i] = 0;
for(int i=1; i<=number; i++){
value[i][0] = 0;
for(int j=1; j<=weight;j++){
if(w[i] <= j){
if((v[i] + value[i-1][j-w[i]]) > value[i-1][j])
value[i][j] = v[i] + value[i-1][j-w[i]];
else
value[i][j] = value[i-1][j];
}
else
value[i][j] = value[i-1][j];
}
}
for(int i=1; i<=number; i++){
for(int j=1; j<=weight;j++)
cout<<value[i][j]<<"\t";
cout<<endl;
}
}
void
OneZeroPacket::show()
{
int remainspace = weight;
for(int i=number; i>=1; i--)
{
if (remainspace >= w[i])
{
if ((value[i][remainspace]-value[i-1][remainspace-w[i]]==v[i]))
{
cout << "item " << i << " is selected!" << endl;
remainspace = remainspace - w[i];
}
}
}
}
int main()
{
int n=3,c=6;
int w[]={4,3,2},v[]={5,2,1};
OneZeroPacket p(c,n,v,w);
p.count();
p.show();
system("pause");
return 0;
}
#include <vector>
using namespace std;
class OneZeroPacket{
public:
OneZeroPacket(int wei, int nu, int *vl, int *wl):weight(wei),number(nu)
{
v = new int[number+1];
w = new int[number+1];
value = new int*[number+1];
for(int i=0; i<=number; i++)
value[i] = new int[weight+1];
for(int i=0; i<number; i++){
v[i+1]=vl[i];
w[i+1]=wl[i];
}
}
void count();
void show();
private:
int ** value;
int weight;
int number;
int *v;
int *w;
};
void
OneZeroPacket::count()
{
for(int i=0; i<=weight; i++)
value[0][i] = 0;
for(int i=1; i<=number; i++){
value[i][0] = 0;
for(int j=1; j<=weight;j++){
if(w[i] <= j){
if((v[i] + value[i-1][j-w[i]]) > value[i-1][j])
value[i][j] = v[i] + value[i-1][j-w[i]];
else
value[i][j] = value[i-1][j];
}
else
value[i][j] = value[i-1][j];
}
}
for(int i=1; i<=number; i++){
for(int j=1; j<=weight;j++)
cout<<value[i][j]<<"\t";
cout<<endl;
}
}
void
OneZeroPacket::show()
{
int remainspace = weight;
for(int i=number; i>=1; i--)
{
if (remainspace >= w[i])
{
if ((value[i][remainspace]-value[i-1][remainspace-w[i]]==v[i]))
{
cout << "item " << i << " is selected!" << endl;
remainspace = remainspace - w[i];
}
}
}
}
int main()
{
int n=3,c=6;
int w[]={4,3,2},v[]={5,2,1};
OneZeroPacket p(c,n,v,w);
p.count();
p.show();
system("pause");
return 0;
}