#include<iostream>usingnamespace std;//递归函数 输出数组a(长度为len) 前n个元素的所有子集//a[] 输入字符数组指针// n 需要输出的前n个元素的所有子集// len a的长度 int b[5]={1,2,2,10,4};int c[5]={-1,-1,-1,-1,-1};int sum=0, w =0, m=0;voidSubset(int a[],int n,int len){if(n ==0){// 递归终止条件
sum =0;
w =0;for(int i =0; i < len; i++){if(a[i]!=-1){
sum += b[i];
w += a[i];}}if(w<=15&& sum >m ){
m = sum;for(int i =0; i < len; i++)if(a[i]!=-1) c[i]= a[i];//cout << m << endl;}return;}for(int j =0; j <=1; j++){//每次需要做两种决策int*temp =newint[len];for(int i =0; i < len; i++) temp[i]= a[i];//用临时数组来覆盖原来数组if(j ==0){
temp[n -1]=-1;}Subset(temp, n -1,len);}}intmain(){int a[]={1,1,2,4,12};Subset(a,5,5);
cout <<"价值最大为:"<< m <<"$"<< endl;
cout <<"分别为";for(int i=0; i<5; i++){if(c[i]!=-1) cout << c[i]<<"kg ";}return0;}