当前位置: 首页 > news >正文

01背包[学术]

对于01背包在上次的文章中已经提到过,但这一次将要系统的学习它。

01背包问题:

有 N件物品和一个容量为 M的背包。第 i件物品的重量是wi ,价值是Di 。求解将哪些物品装入背 包可使这些物品的重量总和不超过背包容量,且价值总和最大。

在上述例题中,每个物品有不拿和拿两种情况,对应二进制中的0和1,我们将这类问题统称为『01背 包』问题。

我们已知条件有第 i个物品的重量 Wi和他的价值Di ,以及背包的容量 。 

按照dp五步法来解:

1.构造问题:

题意即问题

2.拆解成若干个子问题:

我们设f[i][j]是前1到i的物品,重量为j背包价值的最优解。

3.求解子问题:

有了2的铺垫可以考虑如何设计动态转移方程,假设当我们计算到i时,前i-1个物品都已经计算完了,那么此时便有了两种决策(选择)分别是:1.不将第i件物品加入到背包中,那么这种情况下dp[i][j]=dp[i-1][j];2.如果将第i件物品放入背包中那么此情况下的最优解就是dp[i][j]=dp[i-1][j-wi]+Di

4.根据已知子问题求解大问题

dp[i][j]=max(dp[i-1][j],dp[i-1][j-wi]+Di)

5.判断复杂度

时间复杂度O(nm) 空间复杂度O(nm)

code自己写去


http://www.mrgr.cn/news/43840.html

相关文章:

  • RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略
  • c++中多线程的用法
  • 【CSS Tricks】试试新思路去处理文本超出情况
  • lrzsz串口文件传输
  • 打造银行智能营销助手:大模型助力精准营销
  • 网页前端开发之Javascript入门篇(5/9):函数
  • Leetcode力扣刷题——704.二分查找二分搜索法
  • 360桌面助手意见反馈
  • 关于Excel将列号由字母改为数字
  • CSP-J/S 复赛算法 区间动态规划
  • 【黑马点评】 使用RabbitMQ实现消息队列——2.使用RabbitMQ监听秒杀下单
  • 华为平板与非华为电脑多屏协同及Bug处理
  • 五种IO模型与阻塞IO
  • 软考系统分析师知识点三:应用数学
  • 【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件
  • fiddler抓包18-2_导出jmeter、postman脚本(带请求头)
  • 【C#生态园】走进微服务世界:六款必备工具深度剖析
  • 明星周边销售网站开发:SpringBoot技术全解析
  • C++关于链表基础知识
  • 性能测试学习2:常见的性能测试策略(基准测试/负载测试/稳定性测试/压力测试/并发测试)