#include<stdio.h>
#include<math.h>
void main()
{
int w,k,sum,max=0;
int a[100],sign[100];
long i,j,l;
scanf("%d,%d",&w,&k);
for(i=0;i<k;i++)
scanf("%d",&a[i]);
for(i=0;i<pow(2,k);i++)
{
l=0;
j=i;
while(j>0)
{
sign[l++]=j%2;
j/=2;
}
sum=0;
for(j=0;j<k;j++)
if(sign[j]==1)
sum+=a[j];
if(sum<=w&&sum>max)
max=sum;
}
printf("Max=%d",max);
getch();
}
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int totalv;
int num,sum=0,i,j,k,p,suffix=0,time,result,flag=1;
int *depart=NULL,*store=NULL;
short *help=NULL;
printf("Please input the total bulk:");
scanf("%d",&totalv);
printf("Please input the number of all the things:");
scanf("%d",&num);
depart=(int *)malloc(sizeof(int)*num);
store=(int *)malloc(sizeof(int)*num);
help=(short *)malloc(sizeof(short)*num);
for(i=0;i<num;i++)
scanf("%d",&depart[i]);
for(i=0;i<num;i++)
help[i]=1;
time=pow(2,num);
for(p=0;p<time;p++)
{
for(k=0;k<num;k++)
if(help[k]==1)
sum+=depart[k];
if(sum<=totalv)
{
if(flag)
{
flag=0;
result=sum;
for(k=0;k<num;k++)
if(help[k]==1)
store[suffix++]=depart[k];
}
else
{
suffix=0;
if(sum>result)
{
for(k=0;k<num;k++)
store[k]=0;
result=sum;
for(k=0;k<num;k++)
if(help[k]==1)
store[suffix++]=depart[k];
}
}
}
for(j=i-1;j>-1;j--)
if(help[j]==1)
{
help[j]=0;
for(k=j+1;k<num;k++)
help[k]=1-help[k];
break;
}
sum=0;
}
printf("%d\n",result);
for(k=0;store[k];k++)
printf("%4d",store[k]);
free(help);
free(store);
free(depart);
getch();
}
把石头归并的那个程序稍微改了下,就是这个了