#include <stdio.h>
int c;
int n;
int *w;
int *p;
int *x;
int cw;
int cp;
int bestp;
int *bestx;
void Backtrack(int t)
{ if (t>n-1)
{ if (cp>bestp)
{ bestp=cp;
for (int i=0; i<n; i++)
bestx[i]=x[i];
}
}
else
{
for (int i=0; i<=1; i++)
{
x[t]=i;
if (i==0)
Backtrack(t+1);
else
if(cw+w[t]<=c)
{
cw=cw+w[t];
cp=cp+p[t];
Backtrack(t+1);
cw=cw-w[t];
cp=cp-p[t];
}
}
}
}
int main()
{ int i;
int pd[5]={5,3,5,3,2};
int wd[5]={6,5,4,2,1};
c=10; n=5; cw=cp=bestp=0;
w=new int[n];
p=new int[n];
x=new int[n];
bestx=new int[n];
for (i=0;i<n; i++)
{
w[i]=wd[i];
p[i]=pd[i];
}
Backtrack(0);
printf("bestp=%d\n",bestp);
for (i=0;i<n; i++)
printf("%d ",bestx[i]);
printf("\n");
return 0;
}