github-july-寻找和为定值的多个数

来源:互联网 发布:人类命运共同体 知乎 编辑:程序博客网 时间:2024/05/22 06:56

寻找和为定值的多个数

题目描述

输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。

解法:
类背包问题(递归问题)
可以看出这是关于0-1背包问题,可以将问题定义为f(n,m),从1->n中选择多个数,使得之和为m

           那么(1)选取n,则剩下从n-1个数中选择和为m-n的数,即求f(n-1,m-n)
                     ( 2)不选取n,则从剩下的n-1个数中选择和为m的数,即求f(n-1, m)

list<int> nums;void func(int n, int m){if(n<=0 || m<=0)return;if(n == m){for(list<int>::iterator iter = nums.begin();iter!=nums.end();iter++)cout<<*iter<<"+";cout<<n<<endl;}nums.push_front(n);func(n-1, m-n);nums.pop_front();func(n-1,m);}



0 0
原创粉丝点击