输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
来源:互联网 发布:男生基本款衬衫 知乎 编辑:程序博客网 时间:2024/04/28 03:11
本文转自:http://blog.csdn.net/wuzhekai1985/article/details/6728657
问题描述:输入两个整数n和m,从数列1,2.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来。
思路:这个问题其实背包问题的变形,本文给出两种解法。
解法一:用递归,效率可能低了点。假设问题的解为F(n, m),可分解为两个子问题 F(n-1, m-n)和F(n-1, m)。对这两个问题递归求解,求解过程中,如果找到了符合条件的数字组合,则打印出来。
解法二:用循环,其实就是枚举所有组合。对于n ,组合数应该为2^n。我们可以用一个数字 i 来表示组合。如果i = 5,其二进制形式为101,相应的组合为{1, 3}。也就是说,二进制的每一位都代表一个数字,bit0代表数字1,bit1代表数字2,依次类推。当某位为1,表示选中了该位所表示的数字。
参考代码: 为了更好地理解,可以参看另一种递归解法
给出一段测试程序:
int main(){int n, m;cout<<"please enter n and m : ";cin>>n>>m;int *flag = new int[n];for(int i = 0; i < n; i++)flag[i] = 0;BagProblem_Solution1(n, m, flag, n);cout<<endl;BagProblem_Solution2(n, m);delete [] flag;return 0;}
0 0
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
- 21.输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
- 中兴面试题 : 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m. --java算法解决方法。
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m
- 输入两个整数n和m,从数列1,2,3....n中随意取几个数,使其和等于m
- 算法习题21:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,找出和为m
- 动态规划——5 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m
- 《动态规划》 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m
- 输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m问题
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能..
- 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,使其和等于 m
- 算法--中兴面试:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数, 使其和等于 m
- 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数, 使其和等于 m
- 批量SQL之 BULK COLLECT 子句
- 虚拟机缩小磁盘占用空间
- What is the Best Multi-Stage Architecture for Object Recognition?
- String StringBuffer StringBuilder 区别
- C经典18个问题
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
- 突然看到一个新闻,。扯个淡吧。 哈哈
- public static void fill(Object[] a, int fromIndex, int toIndex, Object val)
- Git and GitHub Secret
- Halcon视频学习2.2---图像分割之阈值
- Oracle VM系统Clone后网卡对不上的问题
- BSSID/SSID/ESSID的区别和讲解
- 菜鸟Android学习之路24-显示在标题上的进度条
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数