给定若干个正整数a0、a1、……、an-1,从中选出若干个数,使它们的和恰好为k,要求找出选择元素个数最少的解
/*#include "stdio.h"
#define MAXN 10
int n=10; //10个数
int k=19;
int minsize=10;
int w[]={4,6,8,9,10,12,13,15,3,7};
int x[MAXN]; //存放最终解
void dispasolution()
{ printf("最佳装填方案是:\n");
for(int i=1;i<=n;i++)
if(x[i]!=0)
printf("选取第%d个数\n",i);
printf("总个数%d\n",minsize);
}
void dfs(int i,int tw,int tv,int op[])
{ if (i>n) //找到一个叶子结点
{ if (tw==k && tv<minsize) //找到一个满足条件的更优解,保存
{ minsize=tv;
for (int j=1;j<=n;j++)
x[j]=op[j];
}
}
else //尚未找完所有物品
{
if (tw+w[i-1]<=k) { //左剪枝
op[i] =