码迷,mamicode.com
首页 > 其他好文 > 详细

1到n数组,和为指定数所有序列问题

时间:2014-07-10 14:32:24      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   问题   for   

(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 }

方法二:子集和问题方法,其实跟背包问题差不多。

待续

1到n数组,和为指定数所有序列问题,布布扣,bubuko.com

1到n数组,和为指定数所有序列问题

标签:style   blog   color   os   问题   for   

原文地址:http://www.cnblogs.com/zmlctt/p/3832749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!