子集和问题用子集树算法比较简单,此专题未完待续
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;
}
本文介绍了一种解决子集和问题的方法:子集树算法。通过递归方式遍历所有可能的子集来寻找和为特定值的组合,并提供了一个具体的实现示例,包括源代码。该算法适用于寻找整数数组中所有子集之和等于目标值的情况。
1739

被折叠的 条评论
为什么被折叠?



