递推公式为
用sum(n, m)表示所有可能的1~n之间存在的和为m的组合
那么 sum(n,m) = sum(n-1, m) | sum(n-1, m-n)
直接上代码
void FindCombine...<= 0)
{
return ;
}
la.push_back(n);
FindCombine(la,n-1,m-n);
la.pop_back...();
FindCombine(la,n-1,m);
}
如果允许选择重复的数字呢?...递推公式为
sum(n,m) = sum(n-1, m) | sum(n, m-n)
只需要将上面的代码稍作修改
void FindCombine(std::list &la, int n,...:endl;
}
la.push_back(n);
FindCombine(la,n,m-n);
la.pop_back();
FindCombine(la,