动态规划求解0/1背包问题

题目:

你有一个背包和一些物品,每个物品都有自己的体积和价值。背包有一个最大的体积限制。目标是选择一些物品放入背包,使得背包中物品的总价值最大,同时保证背包中物品的总体积不超过背包的体积限制。

思路:

  1. 初始化变量和数组:

    • w数组存储了各商品的体积(重量)。
    • v数组存储了各商品的价值。
    • bagV表示背包的最大容量。
    • dp二维数组用于存储动态规划表的状态。dp[i][j]表示考虑前i件商品,当背包容量为j时能够获得的最大价值。
  2. 动态规划过程:

    • 外层循环遍历所有商品(i从1到4,因为数组第一位留空)。
    • 内层循环遍历所有可能的背包容量(j从1到bagV)。
    • 如果当前背包容量小于商品i的体积,则不能装入该商品,此时dp[i][j]的值与装入前一个商品时的值相同,即dp[i - 1][j]
    • 如果当前背包容量可以装下商品i,则需要比较装入和不装入商品i的情况,取两者的最大值作为dp[i][j]的值:
      • 不装入商品i:最大价值为dp[i - 1][j]
      • 装入商品i:最大价值为商品i的价值加上剩余容量下的最大价值,即v[i] + dp[i - 1][j - w[i]]
  3. 输出动态规划表:

    • 通过双层循环输出dp数组的所有值,展示整个动态规划过程的状态变化。

代码:

#include<iostream>
using namespace std;
#include <algorithm>int main()
{// 商品的体积(或重量)数组,第一位留空,以便使数组下标与商品编号一致int w[5] = { 0, 2, 3, 4, 5 };// 商品的价值数组,第一位留空,以便使数组下标与商品编号一致int v[5] = { 0, 3, 4, 5, 6 };// 背包的最大容量int bagV = 8;// 初始化动态规划表,全部填充为0。dp[i][j]表示考虑前i个商品时,背包容量为j时的最大价值int dp[5][9] = { { 0 } };// 动态规划过程for (int i = 1; i <= 4; i++) { // 遍历所有商品,i代表商品编号for (int j = 1; j <= bagV; j++) { // 遍历所有可能的背包容量,j代表当前背包容量if (j < w[i]) {// 如果当前背包容量装不下商品i,则dp[i][j]的值与不包含商品i时相同// 即不选择当前商品i,直接继承前一个商品的状态dp[i][j] = dp[i - 1][j];} else {// 如果能装下商品i,则比较不装入和装入商品i的情况,取最大值// 不装入商品i:直接继承前一个商品的状态,即dp[i - 1][j]// 装入商品i:当前商品的价值加上剩余容量下的最大价值,即v[i] + dp[i - 1][j - w[i]]dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);}}}// 输出动态规划表for (int i = 0; i < 5; i++) { // 遍历动态规划表的每一行for (int j = 0; j < 9; j++) { // 遍历动态规划表的每一列cout << dp[i][j] << ' '; // 打印每个状态的值}cout << endl; // 每行打印完毕后换行}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06、pytest将多个测试放在一个类中

官方用例 # content of test_class.py # 实例1 class TestClass:def test_one(self):x "this"assert "h" in xdef test_two(self):x "hello"assert hasattr(x,"check")# content of test_class_demo.py # 每个测试都有唯一的类实例…

VUE学习笔记(表单数据收集)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>收集表单数据</title><script type"t…

Java异常机制入门详解(下)

异常的处理方式 异常有3中处理方式&#xff0c;分别是&#xff1a; ①JVM默认的处理方式 ②自己处理 ③抛出异常 JVM默认的处理方式 ●把异常的名称&#xff0c;异常原因及异常出现的位置等信息输出在了控制台&#xff08;以红色字体&#xff09; ●程序停止执行&#x…

CopyOnWriteArrayList怎么用

什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…

企业网络安全守护者:EventLog Analyzer日志审计系统

在当今数字时代&#xff0c;企业网络不仅仅是业务运营的核心&#xff0c;也成为各种潜在威胁的目标。为了保障企业的网络安全&#xff0c;日志审计系统成为了不可或缺的一环。其中&#xff0c;ManageEngine的EventLog Analyzer作为一款强大而全面的日志管理与审计解决方案&…

回顾Django的第六天

1.session的使用 1.1Cookie 客户端浏览器上的键值对----为了做会话保持 -怎么来的&#xff1f; 服务端写入的---》服务端再返回的响应头中写入---》浏览器会自动取出来--》存起来 -key value 形式--》过期时间---》path---》http only。。。 -只要浏览器中有cookie&…

【第三方】微信登录

目录 前言小程序登录步骤说明前端效果涉及到的接口登录凭证&#xff1a;wx.login获取用户信息&#xff1a;wx.getUserInfo 后端涉及到接口小程序登录 代码展示 微信扫码登录 前言 微信官方文档&#xff0c;需要对接哪个模块就从哪里进入。 由于本次我们需要的是小程序的登录。…

有趣的代码——有故事背景的程序设计3

这篇文章再和大家分享一些有“背景”的程序设计&#xff0c;希望能够让大家学到知识的同时&#xff0c;对编程学习更感兴趣&#xff0c;更能在这条路上坚定地走下去。 目录 1.幻方问题 2.用函数打印九九乘法表 3.鸡兔同笼问题 4.字数统计 5.简单选择排序 1.幻方问题 幻方又…

【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目

什么是UL9540测试&#xff0c;UL9540:2023版本增加哪些测试项目 UL 9540是美国安全实验室&#xff08;Underwriters Laboratories&#xff09;发布的标准&#xff0c;名称为"UL 9540: Energy Storage Systems and Equipment"&#xff0c;翻译为中文为"能量存储…

【JavaWeb】前端工程化(VUE3)

前端工程化&#xff08;VUE3&#xff09; 文章目录 前端工程化&#xff08;VUE3&#xff09;一、概述二、ECMA6Script2.1 es6的变量和模板字符串2.2 es6的解构表达式2.3 es6的箭头函数2.4 rest和spread2.5 es6的对象创建和拷贝2.6 es6的模块化处理 三、前端工程化环境搭建3.1 N…

数据分析师的学习之路-pandas篇(7)

继续接上篇&#xff0c;这次学习下透视表、线性回归还有根据条件上颜色。 3.9 透视表 在excel里也经常用到透视表来构建想要的列的组合来形成一个新的表&#xff0c;在pandas里也能做。 举例数据是这样的&#xff1a; 是各种类产品的订单数据&#xff0c;现在想做一个透视表&…

按照官网文档 通过useExtendedLib扩展库 引入WeUI,报错 组件未定义 | 解决办法

检查开发者工具版本是否过老 参考博客 不要使用 游客模式&#xff0c;游客模式不支持&#xff0c;请注册Appid 使用。 注意 扩展库方式 和 npm 方式不能同时使用&#xff0c;会有相应报错

electron 应用图标修改

修改窗口图标 更换Electron应用程序的桌面图标 准备好你想要作为图标的图片文件&#xff0c;可以是PNG格式安装一个可以转换图片格式为ICO的工具&#xff0c;例如在线转换工具“在线转换icon图标工具”。将你的PNG图片文件上传并转换为ICO格式将转换得到的ICO文件放到你的El…

Haiku库和Jax库介绍

Haiku 是由DeepMind开发的一个深度学习库&#xff0c;它建立在JAX&#xff08;Just Another XLA&#xff0c;为Accelerated Linear Algebra的缩写&#xff09;之上。JAX 是一个由Google开发的数值计算库&#xff0c;专注于高性能数值计算和自动微分。 JAX 提供了强大的数值计算…

synxflow 安装环境

介绍&#xff1a; 该软件可以动态模拟洪水淹没&#xff0c;滑坡跳动和泥石流使用多个cuda支持的gpu。它还提供了一个用户友好但多功能的Python界面&#xff0c;可以完全集成到数据科学工作流程中&#xff0c;旨在简化和加速危害风险评估任务。 这个包我从网上找到的资源特别特…

GAN:WGAN-DIV

论文&#xff1a;https://arxiv.org/pdf/1712.01026.pdf 代码&#xff1a; 发表&#xff1a;2018 摘要 在计算机视觉的许多领域中&#xff0c;生成对抗性网络已经取得了巨大的成功&#xff0c;其中WGANs系列被认为是最先进的&#xff0c;主要是由于其理论贡献和竞争的定性表…

11、信息打点——红队工具篇FofaQuakeSuize水泽Arl灯塔

网络空间测绘引擎 Fofa Quake shodan Zoomeye 主要搜关联资产、特征资产、资产信息&#xff08;在测绘引擎上直接搜IP&#xff0c;它会显示所有与该域名有关的信息。&#xff09; fofa和Quake测绘引擎集成化工具&#xff1a;Finger 自动化信息收集项目 ARL灯塔 Suize水泽 …

洗地机好用吗?口碑好的洗地机有哪些?

自从洗地机开始引入市场以来&#xff0c;它一直受到人们的关注。它在解放家庭清洁劳动力和提供快速方便的清洁方面表现出色&#xff0c;超越了多年来传统的拖把清洁方式。越来越多的人选择使用洗地机来完成家庭清洁任务。如果你也对洗地机产生了浓厚的兴趣&#xff0c;并想购买…

在 AlmaLinux 9.2 上安装Oracle Database 23c

在 AlmaLinux 9.2 上安装Oracle Database 23c 1. 安装 Oracle Database 23c2. 连接 Oracle Database 23c3. 重启启动后&#xff0c;手动启动数据库4. 重启启动后&#xff0c;手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开机启动数据…

Linux环境执行命令python3 test.py传入字符串,test.py接收并处理字符串

可以使用Python脚本文件中的sys模块来接收并处理从Linux环境中传入的字符串命令。 下面是一个具体的示例&#xff1a; Linux环境中执行以下命令&#xff0c;传入字符串参数&#xff1a; python3 test.py "hello world"在test.py文件中&#xff0c;通过sys模块获取…