//输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
//n=10, m=9
output:
/*9 1
2
3
2 1
4
3 1
4 1
3 2
3 2 1
*/
vector<int> factors;
void findFactor2(int sum,int n){
if(sum<0||n<0)
return ;
if(sum==0){
for(vector<int>::iterator iter=factors.begin();iter!=factors.end();++iter){
cout<<*iter<<' ';
}
cout<<endl;
return;
}
factors.push_back(n);//典型的01背包问题
findFactor2(sum-n,n-1);//放n,n-1个数填满sum-n
factors.pop_back();
findFactor2(sum,n-1);//不放n,n-1个数填满sum
}
//n=10, m=9
output:
/*9 1
2
3
2 1
4
3 1
4 1
3 2
3 2 1
*/
vector<int> factors;
void findFactor2(int sum,int n){
if(sum<0||n<0)
return ;
if(sum==0){
for(vector<int>::iterator iter=factors.begin();iter!=factors.end();++iter){
cout<<*iter<<' ';
}
cout<<endl;
return;
}
factors.push_back(n);//典型的01背包问题
findFactor2(sum-n,n-1);//放n,n-1个数填满sum-n
factors.pop_back();
findFactor2(sum,n-1);//不放n,n-1个数填满sum
}