#include <iostream>
#include <iomanip>
using namespace std;
void Kanpsack(int *v,int *w,int c,int n,int m[][9])
{
for(int i=0; i<=c; i++)
{
m[0][i]=0;
}
for(int j=0; j<=n; j++)
{
m[j][0]=0;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=c; j++)
{
if(j<w[i])
{
m[i][j]=m[i-1][j];
}
else
{
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]);
}
}
}
}
void Traceback(int m[][9],int *w,int n,int c,int *x,int *v)
{
int i=n;
int j=c;
if(i>=0)
{
if(m[i][j]==m[i-1][j])
{
x[i]=0;
Traceback(m,w,i-1,j,x,v);
}
else if(j-w[i]>=0&&m[i][j]==m[i-1][j-w[i]]+v[i])
{
x[i]=1;
Traceback(m,w,i-1,j-w[i],x,v);
}
}
}
int main()
{
int n=4,c=8;
int w[5]= {0,2,3,4,5};
int v[5]= {0,3,4,5,6};
int m[5][9];
int x[5];
Kanpsack(v,w,c,n,m);
Traceback(m,w,n,c,x,v);
for(int i=1; i<=n; i++)
{
cout<<x[i]<<' ';
}
return 0;
}