#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; }