題目:輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來.
分析,由該題可知是典型的揹包問題,根據該數是否加入進行遞歸運算。
代碼:
//典型揹包問題
void print(int n,int m,vector<int>&list)
{
if(n==0) return;
if(m==0)
{
for(int i=0;i<list.size();i++)
cout<<list[i]<<"\t";
cout<<endl;
return;
}
list.push_back(n);
print(n-1,m-n,list);
list.pop_back();
print(n-1,m,list);
}
void printBefore(int n,int m)
{
vector<int> list;
if(n==0) return;
if(n>=m)
{
cout<<m<<endl;
n=m-1;
}
print(n,m,list);
}