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

妖精的绣舞 提交于 2020-02-13 13:23:32

题目:

在这里插入图片描述

分析:

因为返回的不是总数目,而是具体的情况,因此不适合使用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();
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!