算法设计-递归法解背包问题 C代码

栈:01背包问题(带价值) 栈解法/回溯算法 递归算法【C语言,数据结构】(内含源代码) 背包问题(Knappsack Problem). 分别设计背包问题的递归算法,和利用栈解决背包问题的非递归算法,分析比较两种算法的时间复杂度和空间复杂度。 需求分析: 1.用递归算法解决背包问题 2.用栈解决背包问题 3.输入两个数代表背包容量与物品个数。然后分两行输入物品重量和价值 例如:递归方法还有一种思路,用f[n]个数组来存储选择到第i件物品时的最优价值,这样虽然空间复杂度大了,但更利于人来理解递归是怎么工作的。在这里,我们选用的是机器效率最高的一种递归。 阅读详情

关注有惊喜

在这里插入图片描述

主要功能:递归法解背包问题

#include<stdio.h>  
  
int maxNum[6];  //存放最优解的编号  
int maxValue=0; //存放最大价值  
int w[6] = {0,2,2,6,5,4};//每个物品的重量,第一个为0,方便角标对应  
int v[6] = {0,6,3,5,4,6};//每个物品的价值,第一个为0,方便角标对应  
int num = 5; //物品的个数    
int cap = 10; //背包能容的重量     
  
void package01(int *flag,int n,int c,int nowValue)  
{  
    int i;  
    if(n == 0 || c == 0)  
    {  
        if(nowValue > maxValue)  
        {     
            for(i=0;i<6;i++)  
                maxNum[i] = flag[i];   
            maxValue = nowValue;  
        }  
        return;  
    }  
      
    if(c >= w[n])  
    {  
        flag[n] = 1;  
        package01(flag, n-1, c-w[n], nowValue+v[n]);  
    }  
    flag[n] = 0;  
    package01(flag, n-1, c, nowValue);    
}  
  
int main()  
{  
    int flag[6] = {0,0,0,0,0,0};    
    int i;    
    package01(flag,num,cap,0);    
    for(i=1;i<=num;i++)  
        maxNum[i] == 1 ? printf("第%d号货物装了包中  \n",i) : 0;  
    printf("最大价值为:%d  \n",maxValue);  
}  

我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。

但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。

好了,就酱紫。

老铁,这要是都不赞,说不过去吧!!!

最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。

【算法设计与分析】期末复习题(超详细) 刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。 阅读详情

相关推荐

【数据结构——栈与队列】(C语言)背包问题,递归

问题描述 一个简化的背包问题:一个背包能装为 总重量为 T ,现有 n 个物件,其重量分别为(W 1 、 、W 2 、 、… 、W n )。问能否从这 n 个物件中挑选若干个物件放入背包为 中,使其总重量正好为 T ?若有解则给出全部解,否则输出无解。 代码实现 #include<stdio.h> int x=0,y=0; void knapsack(int ...

weixin_44234214的博客 2684

背包问题-递归思想(C语言)

目录 问题描述 问题示例 输入输出 递归定义 递归函数 用法示例: 结果展示 问题描述 设有一个背包可以放入物品的重量为s,现有n件物品,重量分别为w[0], w[1], …,w[n - 1]。 能否从这n件物品中选择若干件放入此背包使得放入的重量之和正好等于s。 如果存在一种符合上述要求的选择,则称此背包问题有解:否则,称此背包问题无解。 问题示例 s = 10,n=6, 物品重量为{ 1,8,4,3,5,2 }时 可找到下列4组解:{ 1,4,3,2 },{ .

kim的博客 5514

0-1背包问题的多种算法设计与分析

0-1背包问题的多种算法设计与分析 0-1背包问题描述:给定一组共n个物品,每种物品都有自己的重量wi(i=1~n)和价值vi(i=1~n),在限定的总重量(背包的容量C)内,如何选择才能使得选择物品的总价值之和最高。选择最优的物品子集放置于给定背包中,最优子集对应n元解向量(x1,…xn), xi∈{0或1},因此命名为0-1背包问题。 输入:为方便这种大规模输入数据的调试,采用文件输入,标

wspxxy的专栏 5565

算法分析:C语言实现动态规划之0-1背包问题

背包问题求解原理: 为了装满背包,我们导出一个递归公式如下,设V[i,j]用来表示从前i项中取出来的装人体积为j的背包的物品的最大价值。这里,i的范围是从О到n,j的范围是从0到C。这样,要寻求的是值 V[n,C]。很清楚,V[o,j]对于所有j的值是0,这是由于背包中什么也没有。另-方面,V[i,0]对于所有i的值为0,因为没有东西可放到为0的背包里。一般情况下,当i和j都大于0时,有下面的结论,它是很容易证明的。 观察结论 1.V[i-1,j]:仅用最优的方法取自的物品去装入体积为j的背包所得到的

Coolstuz的博客 8424

算法学习3——0-1背包问题的多算法求解

问题概览:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包最大承载重量为C。物品是不可分割的,应如何选择装入背包的物品,使得装入背包中物品的总价值最大。问题的最终目标:在严格遵循背包最大承载重量C的限制条件下,我们需要挑选决定哪些物品被装入背包中,确保所选择的这些物品的总价值能够达到最大化。问题的约束条件:背包最大承载重量C、物品不可分割、每个物品仅能被选择一次(0-1选择)。。

Usernames_007的博客 2424

黑马程序员--C语言算法之01背包问题

0-1背包问题 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1);如果给你一个背包它能容纳的重量为m(10),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。 输入 第一行输入一个正整数n(1),表示有n组测试数据; 随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1);s表示有s个物品。接下来的s行每行有两个正整数v

qq_17490915的专栏 1378

经典背包问题递归思路及C++代码

引言 背包问题一直是动态规划中的经典例子,充分体现了分治思想的应用,其实就是将问题拆分解决,结合递归得到答案。本文同大多数解决思路一致,我将自己的理解分享给大家,文案较多,请认真阅读 背包问题 一个小偷背着一个一定承重大小的包去博物馆偷东西,博物馆有很多藏品,它们都有各自不同的重量以及对应的价值,藏品列表如图,请问小偷拿着重20的背包所能偷到的最大价值是多少?(每个藏品有且只有一件) 问题解析 首先,我们要定义一个式子B(K,W),它的意思是,偷1-K件物品,背包承重为W的情况下的总价值(这里注意不

Huang_WeiHong的博客 2782

C语言实现的背包问题算法解析与优化

本文还有配套的精品资源,点击获取 简介:背包问题是一个重要的优化问题,在多个领域有着广泛的应用,涉及到资源分配、项目投资等实际场景。在C语言中,通过动态规划技术解决背包问题,主要通过构建二维数组进行状态转移,解决重复计算问题。本文详细介绍了动态规划在0-1背包问题、完全背包问题和多重背包问题中的应用,并提供了C语言实现的细节以及优化技巧,帮助读者深入理解背包问题的算法原理,...

weixin_35826166的博客 1544

0-1背包问题的递归回溯算法实现(C++)

编译环境:Dev-C++ 递归回溯方法求解0-1背包问题的具体算法实现

m0_57443189的博客 4521

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

0-1背包问题 递归算法 c语言实现,已通过编译,可以直接使用

背包问题的递归实现代码

自己写的用递归实现的背包问题,欢迎各位高手指正。

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

◉ 问题: 给定n种物品和一个背包。假设物品i(1≤i≤n)的重量为w ,其价值为V,背包的容量为limit.物品i(1≤i≤n)装人背包时,或者不装人,或者全部装人,不能只装人物品i的一” 部分。问:应该如何选择物品装人背包,才能使背包内物品的总价值最大?   ◉ 0-1背包问题求解过程: ①定义一维数组w(n)储存物品的重量,一维数组v(n)储存物品的价值。 ②定义一维数组x(n)存...

ACTIM的博客 7603

背包问题的递归算法,C语言实现

背包问题的递归算法,很好 问题描述:有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。

0-1 背包问题的 4 种解决方法&&算法策略

蛮力法 递归与分治策略 动态规划 贪心算法 回溯法 分支限界法 前言 0-1背包是一个经典的问题,而它能用不同的算法思想去解决。恰巧最近在看算法,学习算法就是学习解决问题的思路。现在将0-1背包问题与解决方法整理出来,这样不仅能区分不同的算法思想,还能加深对0-1背包问题的理解。虽然有的算法思想并不能解决这一问题,但是为了对算法策略有一个较为整体的了解,所以在这里做一下简单的介绍。 ...

Tyler_Zx的博客 6万+

背包问题递归算法及非递归算法的C++实现

背包问题递归算法及非递归算法的C++实现,问题描述:一个背包能盛放的物品总重量为S,设有n件物品,其重量分别为w1,…,wn,从n件物品中选择若干,使得重量恰好为S

背包问题算法代码C语言实现

背包问题算法代码C语言实现

算法设计与分析期末复习

算法设计与分析复习

m0_62784756的博客 4693

简单记录一次拿网站后台的过程

本文章重在让大家了解拿后台的逻辑与流程,请不要利用此文章的内容对别人的网站进行攻击破坏,否则后果自负,作者不承担任何责任。

kk的博客 916

算法:背包问题解析

部分背包问题和0-1背包问题解析。

weixin_43403605的博客 4664

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

Linux Kernel入门到精通系列讲解 - 总目录

在学习Linux Kernel之前,需要先准备开发环境,方便后续进行开发。可以根据自身情况,选择性阅读该章节。学习该章节之前,你应该了解一下网络概念,明白为什么要讲这些,才能更有方向的去理解学习。Linux ARM平台开发系列讲解(设备树篇) 4.1.1 设备树的原理详解。本项目完全开源,仅供学习使用,如需其他用途,请与本人联系。),本章节你可以学习到。摄像头V4L2子系统、Linux kernel常用的子系统等,ARM架构、RISCV架构、Uboot等。

DSMGUOGUO的博客 1万+
上一篇: 算法设计-动态规划法解背包问题 C代码
下一篇: 算法设计-解最短路径问题 C代码
Young_and_Cold
博客等级 码龄9年 180粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值