前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >背包问题

背包问题

作者头像
河马嘴不大
发布于 2022-12-24 04:19:23
发布于 2022-12-24 04:19:23
35200
代码可运行
举报
运行总次数:0
代码可运行

假设编号分别为a,b,c,d,e的五件物品,重量分别是2,2,6,5,4,价值分别是6,3,5,4,6,现在有一个承重为10的背包,如何装入物品具有最大价值?

首先注意的是该表是从左下开始填的,左边紫色列标示物品编号,并对应的有重量与价值,第一行标示背包重量。(b, 5)表示b、c、d、e四个物品放入大小为5的背包中的最大值。(a, 10)就是abcde五种商品放入容量为10的背包中的最大价值,这正好就是题目的答案。

现在我们开始学怎么填这张表,先随便挑一个表格(a,9),此时背包容量为9,可以选abcde五种物品,我们要找出容量的最大值,根据上述思路分为放入物品a和不放入物品a两种情况。

  • 情况a: 假如放入物品a, 则背包容量变为9-2=7,还剩b,c,d,e四种物品。所以该情况下的最大值 = (b,7) + 物品a的价值6,即9+6
  • 情况b: 假如不放入物品a, 背包容量不变为9,还剩b,c,d,e四种物品。所以该情况下的最大值 = (b, 9),即10

所以现在(a, 9) = max( (b,7)+6, b(9) ) = max(9+6,10) = 15。

同样的步骤填满其他的表格即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function packageMaxValue(weight, value, size){
    // 省略参数合法性校验
    let bagMatrix = []
    for(let w = 0; w <= size; w++) {
        // js不能直接创建二维数组,所以在此初始化数组
        bagMatrix[w] = []
        for (let j = 0; j < 5; j++) {
            // 背包的容量为0,那么一个东西也装不下,此时的值肯定也是为0
            if(w === 0) {
                bagMatrix[w][j] = 0
                continue
            }
            // 背包的容量小于物品j的重量,那么就没有上述情况a了
            if(w < weight[j]){
                bagMatrix[w][j] = bagMatrix[w][j-1] || 0
                continue
            }
            bagMatrix[w][j] = Math.max((bagMatrix[w-weight[j]][j-1] || 0) + value[j], bagMatrix[w][j-1] || 0)
        }
    }
    return bagMatrix
}

let weight = [4, 5, 6, 2, 2]
let value = [6, 4, 5, 3, 6]

console.log(packageMaxValue(weight, value, 10))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【在线五子棋对战】四、MySQL API 使用
​ 众所周知,MySQL 数据库是一个典型的 C/S 结构,即:客户端和服务器端。如果我们部署好了 MySQL 服务器,想要在客户端访问服务器端的数据,在编写程序的时候就可以通过官方提供的 C 语言的 API 来实现,因为我们总不能说在程序中开个子进程去使用 SQL 语句是吧,所以直接通过 API 来调用是最省事的!
利刃大大
2025/06/11
870
Linux——MySQL用户管理与链接
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
有礼貌的灰绅士
2025/05/18
860
Linux——MySQL用户管理与链接
论一人做项目的压力与收获
大家好,终于到了周末,有时间来做个总结,来跟大家一起来分享与学习,最近一直在做项目,除此之外,做点其他事情,并没有时间去分享公众号文章。今天主要来谈谈一人做项目的压力与收获以及从一个项目中如何去学习以及有什么样的压力的问题。
公众号guangcity
2019/09/20
8850
论一人做项目的压力与收获
Mysql数据库学习(四):常用Mysql C API 介绍和使用、封装一个访问Mysql数据库的类MysqlDB
s1mba
2017/12/28
2.7K0
Mysql数据库学习(四):常用Mysql C API 介绍和使用、封装一个访问Mysql数据库的类MysqlDB
C++ 之 VS2010 和MySQL数据库的链接问题
if (0 == mysql_library_init(0, NULL, NULL)) {
恒辉信达
2024/11/22
1420
C/C++链接数据库(MySQL)(超级详细)
MySQL :: MySQL 8.0 C API Developer Guide :: 5.4.41 mysql_init()
ljw695
2025/01/03
5980
C/C++链接数据库(MySQL)(超级详细)
linux下mysql函数的详细案列
1 MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, 2 const char *user, 3 const char *passwd, 4 unsigned i
Gxjun
2018/03/26
3.2K0
MySQL见闻录 - 入门之旅(六)(C++操作MySQL)
我也是个新手,所以这个整理的可能会比较杂,蛮看,等入门之后在拿个小项目练一下就熟悉了。
看、未来
2020/08/25
1.9K0
实现一个简单的 mysql 工具
无论在 windows 下还是 linux 下,我们每次去连接 mysql 的时候都会运行一个叫做 mysql 的命令,本文就模仿制作一个类似的程序,实现可以在里面执行 DML 和 DQL 语句。具体代码的实现请参考程序。
我与梦想有个约会
2023/10/20
2540
实现一个简单的 mysql 工具
Linux下C语言操作MySQL
MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源。MySQL有以下特性:
程序手艺人
2019/02/21
6.3K0
2015博客升级记(四):CentOS 7.1编译安装MySQL5.7.7rc
这是《2015年博客升级记》系列文章的第四篇,主要记录在Linux系统中如何编译安装MySql数据库。
typecodes
2024/03/29
1510
2015博客升级记(四):CentOS 7.1编译安装MySQL5.7.7rc
VS 环境使用MySQL Connector C 6.1 连接数据库
下载MySQL Connector/C,根据你的系统版本选择下载ZIP ARCHIVE,下载链接
全栈程序员站长
2022/09/14
2.6K0
mysql 连接池的实现
涉及后端的数据交互管理的时候,我们在应用层总是希望将一些过程进行封装进行规模化管理,池化技术基本就是来干这种事情的,线程池,内存池,连接池,请求池等等都是来干这种事情的,当然如果从算法层面来说,这种就是用空间来换时间的做法。我们的很多著名的算法也是基于这样的方式来优化的,著名的 KMP 算法,通过维护一个 next 数组,来降低算法的时间复杂度。
ge3m0r
2024/05/26
2520
C中Mysql的基本api接口
这些基本的使用方式和注意事项可以帮助你有效地使用 mysql_query 来执行数据库操作。
薄荷冰
2024/05/26
2100
Linux gcc编译生成静态库和共享动态库的过程
这篇文章主要通过实例演示在Linux下如何使用gcc分别编译生成静态库和动态库文件以及其它程序如何使用这个生成的静态库和动态库。
typecodes
2024/03/29
9570
Linux gcc编译生成静态库和共享动态库的过程
【Linux】Ubuntu下C语言访问MySQL数据库入门
首先以用户rick登录MySQL数据库(用户rick已经被root权限用户赋予了创建数据库等等的权限):
bear_fish
2018/09/14
8.4K0
【Linux】Ubuntu下C语言访问MySQL数据库入门
C++利用MSQL API连接和操作数据库
在Windows平台,我们可以使用ADO、ODBC或者MySQL API进行连接和操作。ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的一个用于存取数据源的COM组件。它提供了程序语言和统一数据访问方式OLE DB的一个中间层,也就是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。
恋喵大鲤鱼
2018/08/03
2K0
C++利用MSQL API连接和操作数据库
mysql基本操作以及python控制mysql(1)–环境安装
学习了虫师的博文,最近准备将人脸识别器提升到网站阅读签到信息的状态。所以打算将识别器获取的签到信息再放到数据库中,so。。加油么么哒。。
十四君
2019/11/23
7710
C语言调用mysql的存储过程
下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分。 建立数据库表过程: create table class( cno varchar(8) not null, sno varchar(8) not null, ordinary_score int, last_score int, all_score int );
艳艳代码杂货店
2021/10/27
2.9K0
MySQL见闻录 - 入门之旅
相比于5代版本,这款跨越6、7代版本的8代版本有许多的好评,当然我也没体验过5代版本,反正要用就用最新的嘛。
看、未来
2020/09/29
8680
MySQL见闻录 - 入门之旅
推荐阅读
相关推荐
【在线五子棋对战】四、MySQL API 使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验