子集和问题用子集树算法比较简单,此专题未完待续
void subSetSum(int a[],int n,int i, int sum, int currSum, int &num, vector<int> & vt) {
if (i == n) {
if (currSum + a[i] == sum)
{
++ num;
vt.push_back(a[i]);
for (int j = 0; j<vt.size(); ++j) cout<<vt[j]<<" ";
cout<<endl;
vt.pop_back();
}
return;
}
vt.push_back(a[i]);
if (currSum + a[i] == sum)
{
++ num;
for (int j = 0; j<vt.size(); ++j) cout<<vt[j]<<" ";
cout<<endl;
}
subSetSum(a,6,i +1,sum,currSum + a[i],num,vt);
vt.pop_back();
subSetSum(a,6,i +1,sum,currSum,num,vt);
}
int main() {
int a[6] = {1,5,-2,2,1,3};//sum = 3;
int num = 0;
vector<int> vt;
subSetSum(a,6,0,3,0,num,vt);
cout<<num<<endl;
}