#include <iostream>
using namespace std;
int n;
int c[100][100];
int w[100],v[100],x[100];
void aaa(int n,int m)
{
int i,j;
for(i=0;i<=m;i++)
c[0][i]=0;
for(i=1;i<=n;i++)
{
c[i][0]=0;
for(j=1;j<=m;j++)
if(w[i]<=j)
{
if(v[i]+c[i-1][j-w[i]]>c[i-1][j])
c[i][j]=v[i]+c[i-1][j-w[i]];
else
c[i][j]=c[i-1][j];
}
else
c[i][j]=c[i-1][j];
}
}
void bbb(int c[][100],int m)
{
int i;
for(i=n;i>=2;i--)
{
if(c[i][m]==c[i-1][m])
x[i]=0;
else
{
x[i]=1;
m=m-w[i];
}
}
x[1]=(c[1][m])?1:0;
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
}
int main()
{
int m,i;
cin>>n;
cin>>m;
for(i=1;i<=n;i++)
cin>>w[i];
for(i=1;i<=n;i++)
cin>>v[i];
aaa(n,m);
bbb(c,m);
return 0;
}
经典01背包问题
最新推荐文章于 2025-01-09 23:22:33 发布