題目:
分析:
因爲返回的不是總數目,而是具體的情況,因此不適合使用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();
}