#include<iostream>
#include<cstdlib>
using namespace std;
void packer(int *a,int *b,int **c,int n,int m,int *d){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(j>=b[i-1]){
if((c[i-1][j-b[i-1]]+a[i-1])>c[i-1][j]){
c[i][j]=c[i-1][j-b[i-1]]+a[i-1];
}else{
c[i][j]=c[i-1][j];
}
} else{
c[i][j]=c[i-1][j];
}
}
}
for(int i=n;i>=1;i--){
if(c[i][m]!=c[i-1][m]){
d[i-1]=1;
m=m-b[i-1];
}else{
d[i-1]=0;
}
}
}
int main(){
int a,b;
int *arrx,*arry,**arrz,*arra;
while(cin>>a>>b){
arrx = (int*)malloc(a*sizeof(int));
arry = (int*)malloc(a*sizeof(int));
arra = (int*)malloc(a*sizeof(int));
arrz = (int**)malloc((a+1)*sizeof(int*));
for(int i=0;i<a;i++){
cin>>arrx[i];
}for(int i=0;i<a;i++){
cin>>arry[i];
}
for(int i=0;i<=a;i++){
arrz[i]=(int*)malloc((b+1)*sizeof(int));
}
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++){
arrz[i][j]=0;
}
}
packer(arrx,arry,arrz,a,b,arra);
cout<<arrz[a][b]<<endl;
for(int i=0;i<a;i++){
cout<<arra[i];
}
cout<<endl;
}
}
0-1背包
最新推荐文章于 2024-08-16 23:50:28 发布