leetcode:39. 组合总和(回溯)

题目:

在这里插入图片描述

分析:

因为返回的不是总数目,而是具体的情况,因此不适合使用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();
}
发布了144 篇原创文章 · 获赞 89 · 访问量 3774
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章