【数据结构】简单的01背包 | 主要思想分析

这篇具有很好参考价值的文章主要介绍了【数据结构】简单的01背包 | 主要思想分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

简单背包问题是一个经典的组合优化问题,在计算机科学和算法领域被广泛研究和应用。

问题描述如下:给定一组物品,每个物品有对应的重量和价值,以及一个固定的背包容量。目标是选择一些物品放入背包中,使得放入背包中的物品总重量不超过背包容量,同时使得物品总价值最大。

题解

简单背包是一个动态规划问题,那么我们来写状态转移公式~

动态规划的递推公式为:

dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])

1)dp数组的意思?dp[i][j],前i件物品放入最多重量为j的最大价值

2)dp[i-1][j]表示第i-1个物品放入背包时的最大价值,即此时不放入第i件物品的最大价值。

3)dp[i-1][j-w[i]] + v[i]表示第i个物品放入背包时的最大价值,w[i]和v[i]分别表示第i个物品的重量和价值。j减去w[i],为第i件物品腾出位置,之后再加上v[i],即第i件放入的价值。

通过填充dp数组,最终dp[N][C]即为问题的最优解,表示在给定背包容量下放入N个物品的最大价值。

另外附上优化后使用一维数组的关键代码:文章来源地址https://www.toymoban.com/news/detail-534589.html

   for(int i=0;i<n;i++)//n次
      for(int j=C;j>=w[i];j--)//倒着走,及时更新
         dp[j]=max(dp[j],dp[j-w[i]]+v[i])

到了这里,关于【数据结构】简单的01背包 | 主要思想分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构-堆结构与堆排序思想

    heap.h #pragma once #include stdio.h #include stdbool.h #include assert.h #include errno.h #include stdlib.h //数组实现堆 typedef int HPDataType; typedef struct Heap {     HPDataType* a;     int size;     int capacity; }HP; void HeapInit(HP* php);//初始化堆 void HeapDestroy(HP* php);//销毁堆 void HeapPush(HP* php, HPDataType x);//插入数

    2024年02月16日
    浏览(35)
  • 数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)

    写在前面:欢迎来到「湫歌」的博客。我是秋秋,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我

    2024年02月10日
    浏览(84)
  • 200个经典面试题(算法思想+数据结构)_1

    1. 爬楼梯 70. Climbing Stairs (Easy) 题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。 定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。 第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步

    2024年02月13日
    浏览(42)
  • linux tcp 主要数据结构

    当讨论 tcp 的时候, 我们能想到很多概念: 传输层协议,面向连接,可靠,字节流,状态机,三次握手,四次挥手,端口号,连接队列,mss,rtt,定时器,ack,流控,拥塞控制,重传机制,窗口,慢启动,序列号,保序,发送缓冲区,接收缓冲区,nagle,minshall,autocrok,fast

    2024年02月20日
    浏览(26)
  • InnoDB底层的一些主要数据结构

    MySQL的InnoDB存储引擎使用了一些关键的底层数据结构来优化数据的存储、索引和查询。以下是InnoDB底层的一些主要数据结构: 1. **B+树索引**:    - InnoDB的主要数据结构是B+树(平衡树的一种变体),用于存储表数据和索引。    - 每个InnoDB表都有一个主键索引(如果没有显式

    2024年02月01日
    浏览(43)
  • Java数据结构与算法----动态规划(背包篇)

    1.1.算法思路 0/1背包是动态规划、背包问题中最经典的问题啦!它主要的问题是: 给定n种物品、这n种物品的重量分别是,价值分别是 ,而你有一个容量为C的背包,请问如何求出所能拿的最大价值呢? 对于动态规划,我们先需要找到一条推导公式,然后确定边界: 我们设

    2024年02月07日
    浏览(49)
  • 【数据结构】深入探讨二叉树的遍历和分治思想(一)

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要讲述二叉树的递归结构及分治算法的思想。  为了实现二叉树的基本操作以及更好的了解二叉树的结构,先手动创造一个链式二叉树。  创建出来的结构: 📗创建出来的这棵二叉

    2024年02月08日
    浏览(41)
  • 用栈的思想实现将一个十进制数字转换为八进制--数据结构

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍🔥大魔王与你分享:“并不是你喝了一瓶雪花,就有人愿意陪你勇闯天涯。” 学完栈的思想后,我们知道了栈只能从栈顶进出,如果

    2023年04月24日
    浏览(42)
  • 【夜深人静学习数据结构与算法 | 第十二篇】动态规划——背包问题

      目录  前言:  01背包问题: 二维数组思路: 一维数组思路: 总结:       在前面我们学习动态规划理论知识的时候,我就讲过要介绍一下背包问题,那么今天我们就来讲解一下背包问题。 在这里我们只介绍 01背包 ,至于分组背包和混合背包这种的已经属于竞赛级别的

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包