题目:
分析:
因为返回的不是总数目,而是具体的情况,因此不适合使用dp。
dp,其实也是暴力枚举,但是因为有记录状态,可以省去已经求过的一些。
代码:
vector<vector<int> > vv;
int size;
void f(vector<int> v,int tar,int c,vector<int> n)
{
cout<<tar<<" "<<c<<endl;
//从第c个数开始找总和为tar的
if(c==size)
{
if(tar==0) vv.push_back(v);
return;
}
f(v,tar,c+1,n);
for(int i=1;tar-i*n[c]>=0;i++)
{
v.push_back(n[c]);
f(v,tar-i*n[c],c+1,n);
}
}
int main()
{
vector<int> n;
int target=7;
size=n.size();
vector <int> v;
f(v,target,0,n);
cout<<vv.size();
}