输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
来源:互联网 发布:申请淘宝达人网址 编辑:程序博客网 时间:2024/06/05 16:33
这道题的思路参考0-1背包:定义函数F(n,m)来求解这个问题,那么F(n,m)可以分解为两个子问题F(n-1,m)和F(n-1,m-n).由于题目要求列出所有的组合,使用类似动态规划的方法比较复杂,我在这里直接使用递归来解决这个问题。虽然效率可能不是很好,但是代码的可读性还是比较好的。
#include <iostream>#include<malloc.h>#include<string.h> using namespace std; int length; void PrintSolutions(int *flag) { for (int i=0; i<length; i++) { if (flag[i] == 1) { cout << i+1 << " "; } } cout << endl;} void BagProblem(int m, int n, int *flag) { if(n<1 || m<1) return; if(m < n) n = m; if (n == m) { flag[n-1] = 1; PrintSolutions(flag); flag[n-1] = 0; } flag[n-1] = 1; BagProblem(m-n, n-1, flag); flag[n-1] = 0; BagProblem(m, n-1, flag); }int main() { int m, n; cin >> m >> n; length = n; int *flag = (int *)malloc(sizeof(int)*n); memset(flag, 0, sizeof(flag)); BagProblem(m,n,flag); //delete flag;//这个地方犯了一个原则性的错误 new和delete成对使用, malloc应该和free成对使用,要不然就会造成内存泄露 free(flag); return 0; }
阅读全文
0 0
- 输入两个整数 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 ,要求将其中所有的可能组合列出来.
- 21.输入两个整数 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 ,要求将其中所有的可能组合列出来.
- 输入两个整数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 ,要求将其中所有的可能组合列出来
- Android设备开机swap的方法
- 在Java中使用键盘输入数据的几种方法
- 2017 ACM/ICPC Asia Regional Shenyang Online 1002 cable cable cable
- Github Page--CSDN新人的第二选择
- k近邻算法
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- javascript随机生成一定位数的密码
- 网络应用进程通信
- 第三周 4 顺序表 应用(2)
- cocos2dx-JniHelper 使用,在c++层面调用java层接口
- LeetCode40
- 【Ubuntu】Ubuntu下搜狗输入法打不出中文
- 生成对抗网络(GAN)简单梳理
- 2017 ACM/ICPC Asia Regional Shenyang Online 1004 array array array