首页 > 代码库 > 1到n数组,和为指定数所有序列问题
1到n数组,和为指定数所有序列问题
(1)方法一,背包问题解法
1 #include <iostream> 2 using namespace std; 3 #include <vector> 4 #include <list> 5 6 //采用背包问题方法,从后向前,最后一个放和不放背包里,注意递归退出条件和sum==n后,没有return而是继续 7 vector<int> a; //存背包 事实证明用vector就可以,也不用revers。 8 9 void subofsum(int sum,int n,bool &flag)10 {11 if(sum<=0||n<=0) //迭代退出条件12 return;13 if(sum==n)14 {15 16 for(vector<int>::iterator i=a.begin();i!=a.end();i++)17 {18 cout<<*i<<"+";19 flag=true;20 }21 cout<<n<<endl; //注意n没有放入背包,而是输出了,而且后面没有return,让n接着放入背包,肯定不行,就会弹出北包,放subofsum(sum,n-1,flag);22 23 }24 a.push_back(n);25 subofsum(sum-n,n-1,flag);26 a.pop_back();27 subofsum(sum,n-1,flag);28 }29 30 int main()31 {32 int sum=13;33 int n=9;34 bool flag=false;35 subofsum(sum,n,flag);36 if(flag==false)37 {38 cout<<"not found"<<endl;39 }40 system("PAUSE");41 }
方法二:子集和问题方法,其实跟背包问题差不多。
待续
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。