0/1背包程序
以前看过深度搜索的算法这是我自己设计的一个广度搜索算法,
float w[10],p[10];
int t[110][20];
#define N 4
f(int i,float limit,float s,int k){float d,d1;
if(limit==0)return 0;
if(!i){if(w[i]<=limit)return p[0];return 0;}
s-=p[i];
if(w[i]<=limit){
if((d=f(i-1,limit-w[i],s,2*k-1)+p[i])>=s){t[i][2*k-1]=1;return d;}
if(d>=(d1=f(i-1,limit,s,2*k))){t[i][2*k-1]=1;return d;}return d1; }
else return f(i-1,limit ,s,2*k);}
main(){int i,j;float y, s=0;
for(i=0;i<N;i++){
scanf("%f",&w[i]);scanf("%f",&p[i]);s+=p[i];}
for(i=0;i<10;i++)
for(j=0;j<10;j++)t[i][j]=0;
y=f(N-1,7,s,1);j=1;
for(i=2;i>=0;i--){if(t[i][j]){j=2*j-1;
printf("%f,",w[i]);}else j*=2;}
printf("\nsum=%f",y);getch();}
搜索更多相关的解决方案:
背包
----------------解决方案--------------------------------------------------------