#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int V[200][200];
int FindMax(int n,int w[],int v[],int x[],int C)
{
int i,j;
for(i=0;i<=n;i++)
{
V[i][0]=0;
}
for(j=0;j<=C;j++)
{
V[0][j]=0;
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=C;j++)
{
if(j<w[i])
{
V[i][j]=V[i-1][j];
}
else
{
V[i][j]=max(V[i-1][j],V[i-1][j-w[i]]+v[i]);
}
}
}
j=C;
for(i=n-1;i>=0;i--)
{
if(V[i][j]>V[i-1][j])
{
x[i]=1;
j=j-w[i];
}
else
{
x[i]=0;
}
}
printf("选中的物品是(0为未选中,1为选中):");
for(i=0;i<n;i++)
{
printf("%d ",x[i]);
}
return V[n-1][C];
}
int main()
{
int f;
int w[100];
int v[100];
int x[100];
int n,i;
int C;
printf("请输入背包的最大体积:");
scanf("%d",&C);
printf("请输入物品的数量:");
scanf("%d",&n);
printf("请输入物品的体积:");
for(i=0;i<n;i++)
{
scanf("%d",&w[i]);
}
printf("请分别输入物品的价值:");
for(i=0;i<n;i++)
{
scanf("%d",&v[i]);
}
f=FindMax(n,w,v,x,C);
printf("\n");
printf("物品价值最大为:");
printf("%d ",f);
return 0;
}