`
ackerman
  • 浏览: 75101 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归算法---0-1背包问题(面试宝典)

 
阅读更多
/** 
 *正整数n,m,从数列1、2、3、...、n中随意取几个数。使其和等于m  
 *要求将其中所有可能的组合列出来 
 */ 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int *out;
int out_size;
void bag(int n, int m)
{
        int i;
        if (n < 1 || m < 1 || (n == 1 && m != 1))
                return;
        if (m == n) {
                out[n] = 1;
                for (i = 1; i <= out_size; i++) {
                        if (out[i])
                                printf("%d ", i);
                }
                printf("\n");
                out[n] = 0;
        }
        bag(n - 1, m);
        out[n] = 1;
        bag(n - 1, m - n);
        out[n] = 0;

}

int main()
{
        int n, m;
        printf("Please input two num(n,m):");
        scanf("%d%d", &n, &m);
        if (n > m)
                n = m;
        out_size = n;
        out = (int *)malloc((n + 1) * sizeof(int));
        memset(out, 0, (n + 1) * sizeof(int));
        bag(n, m);
        free(out);
        return 0;
}

 

分享到:
评论

相关推荐

    0-1背包问题-递归算法 c语言实现

    ### 0-1 背包问题:递归算法 C语言实现 #### 一、问题背景及定义 0-1背包问题是一种经典的组合优化问题,在计算机科学与运筹学领域有着广泛的应用。该问题的基本形式如下:给定一组物品,每种物品都有自己的重量和...

    汉诺塔递归算法--C语言

    汉诺塔问题是一个经典的递归算法问题,它涉及到三个柱子(塔)和若干个大小不一的圆盘。在初始状态下,所有圆盘按照大小顺序堆叠在第一个柱子(1号塔)上,大的在下,小的在上。目标是将所有的圆盘从1号塔移动到2号...

    山东科技大学算法设计与分析实验7:0-1背包问题的回溯和递归算法 源.cpp+报告

    通过这个实验,学生不仅可以深入理解0-1背包问题,还能提升对回溯法和递归法的理解,以及如何在实际问题中应用这些算法。同时,实验报告的编写有助于培养学生的分析和总结能力,使他们能够清晰地阐述解决问题的过程...

    背包问题递归算法C语言

    **背包问题递归算法在C语言中的实现** 背包问题是一个经典的计算机科学问题,它涉及到在给定容量限制的背包中,如何选择物品以达到最大的价值。这个问题通常被用来模拟资源有限的情况下的决策优化,比如投资组合...

    0-1背包递归求解Java语言描述

    递归是解决0-1背包问题的一种常见方法。其基本思想是从最小规模的子问题开始,逐步构建到原问题的解决方案。对于第i个物品和容量为j的情况,我们可以有两种选择:要么选择该物品,要么不选择。如果选择,那么背包的...

    背包问题 动态规划递归算法)

    总之,掌握背包问题的动态规划递归算法对于解决实际中的资源分配、任务调度等问题具有重要意义,同时也对理解和运用动态规划与递归算法有着基础性的帮助。通过深入理解并熟练运用这一算法,我们可以在面对复杂优化...

    C++ 动态规划算法实现0-1背包问题

    总的来说,这个C++实现的0-1背包问题动态规划算法不仅展示了如何利用动态规划解决问题,还提供了代码调试和测试的方法,是学习和理解动态规划算法的一个优秀实例。通过深入研究和实践,我们可以掌握这一重要的算法...

    递归解0-1背包问题

    基于于C++的使用递归的方式解0-1背包

    遗传算法回溯算法解0--1背包问题

    ### 遗传算法与回溯算法在0-1背包问题中的应用 #### 一、0-1背包问题概述 0-1背包问题是一个经典的组合优化问题,在计算机科学和运筹学领域有广泛的应用。该问题的核心是:给定一组物品,每种物品都有自己的重量和...

    .net 递归算法 .net 递归算法.net 递归算法

    - **动态规划**:一些优化问题,如斐波那契数列、背包问题、最长公共子序列等,可以通过递归配合记忆化搜索来解决,避免重复计算。 - **回溯法**:在解决组合优化问题,如八皇后问题、N皇后问题、迷宫问题时,递归...

    算法-基础算法- 递归算法(包含源程序).rar

    - **动态规划**:许多动态规划问题可以转化为递归形式,如斐波那契数列、背包问题等。 - **回溯法**:在解决约束满足问题或寻找所有可能解的问题中,如八皇后问题,使用递归进行回溯搜索。 4. **递归效率与优化**...

    基础算法-递归-杨鑫20191010.pptx

    基础算法-递归-杨鑫20191010.pptx,基础算法-递归-杨鑫20191010.pptx,基础算法-递归-杨鑫20191010.pptx

    0-1背包问题(回溯算法)

    在0-1背包问题中,回溯算法通过试探性地选取物品并跟踪当前选择的效果,当发现当前路径无法达到最优解时,会撤销先前的选择,尝试其他可能的路径,这个撤销并尝试新路径的过程就是“回溯”。 算法设计通常包括以下...

    java算法 0-1 背包问题回溯算法解决 netbeans

    本资源聚焦于一个经典的算法问题——0-1背包问题,并提供了使用回溯算法的解决方案。0-1背包问题是一个典型的组合优化问题,它源自实际生活中的物品打包场景:假设你有一个容量有限的背包,需要从中选择最有价值的...

    第6章 函数和递归(C++版) 第二节 递归算法-2021-01-25(B).pdf

    这个例子展示了如何将大问题(计算`xn`)转化为小问题(计算`xn-1`),然后不断递归直到达到基本情况`n=0`,此时返回1。递归函数`xn`在`n=0`时停止递归,对于`n&gt;0`,则返回`x * xn(n-1)`的结果。这就是递归的思想,...

    acm递归算法总结竞赛

    1. **递归定义**:递归算法是函数或过程通过调用自身来解决问题的一种方法。每次调用都将问题分解为更小的部分,直到达到基本情况。 2. **基本原理**:递归算法通常包括两个部分:递归规则(如何将大问题分解为小...

    递归算法专题ppt

    1. **确定基本情况**:这是递归算法中最小的子问题,可以直接给出答案。 2. **定义递归规则**:如何将大问题分解为小问题,并通过这些小问题的解决方案组合成大问题的解决方案。 3. **分析递归深度**:递归调用的...

    VC对磁盘文件遍历搜索的递归算法和非递归算法

    递归算法是一种基于函数自身调用解决问题的方法。在文件遍历中,递归算法通常从根目录开始,检查每个目录中的文件,如果文件不是目标,则继续进入子目录进行相同的操作,直到找到目标文件或遍历完整个文件系统。递归...

    利用回溯法解0-1背包问题讲解

    * 算法描述:0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP难的。0-1背包问题的解空间可用子集树表示。 * 在搜索解空间树时,只要其左儿子结点是一个可行结点,搜索就进入左子树。当右子树中有可能包含最...

    用回溯算法解决0/1背包问题

    ### 使用回溯算法解决0/1背包问题 在计算机科学领域,背包问题是一类经典的组合优化问题,其中0/1背包问题是指给定一组物品,每个物品都有一个重量和一个价值,目标是在不超过背包总承重的情况下,尽可能使得所选...

Global site tag (gtag.js) - Google Analytics