用C++写的,程序如下。
类似背包问题,意思你自己理解吧,很简单。
#include
#include
using namespace std;
int a[10000],n,result=0,rescount=0,b[10000],c[10000],capacity;
void fun(const int cap,int count)
{
if(!cap)
{
for(int i=0;i
exit(0);
}
for(int i=0;i
if(a[i]&&(cap-a[i]>=0))
{
b[count]=a[i];
a[i]=0;
fun(cap-b[count],count+1);
a[i]=b[count];
b[count]=0;
}
}
if(cap
result=cap;
rescount=count;
memcpy(c,b,sizeof(int)*count);
}
}
int main()
{
srand(time(NULL));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//cin>>capacity;
capacity=rand()%999999999+1;
cout<<"capacity="<
n=rand()%10000+1;
cout<<"n="<
for(int i=0;i
//cin>>a[i];
a[i]=rand()%100000+1;
//cout< }
fun(capacity,0);
for(int i=0;i
return 0;
}
要是不考虑时间代价的话,用递归可以实现吧。。。