day 42 01背包

news2024/11/26 16:56:16

01背包裸题
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。
每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

二维数组

  1. dp含义:
    dp[ i ][ j ] 表示从下标为 [ 0 - i ]的物品里任意取,放进容量为 j 的背包,价值总和最大是多少。

  2. 递推公式
    在分析第 i 个物品 dp[ i ][ j ] 能否放到背包j里时,有以下三种情况
    (1)w[ i ] > 背包总重量 不放 dp[ i ][ j ] = dp[ i - 1 ][ j ]
    (2)不放 dp[ i ][ j ] = dp[ i - 1 ][ j ]
    (3)放进去 dp[ i ][ j ] = dp[ i - 1 ][ j - w[ i ] ] + v[ i ]
    则 dp[ i ][ j ] = max (dp[ i - 1 ][ j - w[ i ] ] + v[ i ], dp[ i - 1 ][ j ]

  3. 初始化
    如果物品下标从0开始
    for (int j = weight[0]; j <= bagweight; j++) { dp[0][j] = value[0];}
    如果物品下标从1开始 , 直接初始化为0 就行

  4. 顺序 由递推公式可见,当前值取决于自己左上角的值,那么先遍历重量,再遍历物品 和 先遍历物品再遍历重量是一样的

一维滚动数组
原理:当前层的状态只与上一层有关系,所以把上一层的数字拷贝下来,到当前层进行计算,用新的值进行覆盖,把二维数组压缩为一维

  1. dp含义:
    dp[ j ] 容量为j的背包能装的最大价值

  2. 递推公式
    dp[ j ] = max(dp[ j ], dp[ j - w [ i ] ] + v[ i ])
    因为该层数据使上一层拷贝下来的所以原本的 dp[ j ] == dp[ i - 1 ][ j ]

    在分析第 i 个物品 dp[ i ][ j ] 能否放到背包j里时,有以下三种情况
    (1)w[ i ] > 背包总重量 不放 dp[ i ][ j ] = dp[ i - 1 ][ j ]
    (2)不放 dp[ i ][ j ] = dp[ i - 1 ][ j ]
    (3)放进去 dp[ i ][ j ] = dp[ i - 1 ][ j - w[ i ] ] + v[ i ]
    则 dp[ i ][ j ] = max (dp[ i - 1 ][ j - w[ i ] ] + v[ i ], dp[ i - 1 ][ j ]

  3. 初始化
    dp[ 0 ] = 0 非零下标,由于背包是正数背包,并且更新时求max 那么 初始化为正数的最小值 0

  4. 顺序 正序遍历物体,逆序遍历背包
    列表后面的值需要通过与上一层遍历得到的前面的值比较确定
    如果不采用倒序遍历,遍历后一个状态时,要用到前面某个状态的值dp[j-w[i]],而前面的状态值通过正序在本轮遍历已经被覆盖了,而计算后一个状态的值时需要的是覆盖前的值

在这里插入图片描述
416. 分割等和子集

题目:
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
分析:
那么只要找到集合里能够出现 sum / 2 的子集总和,就算是可以分割成两个相同元素和子集了。
背包容量为 sum / 2 物品为数组nums 重量为 nums[ i ] 价值为 nums[ i ]
dp[sum/2] == sum/2 表示能装满
一维背包 逆序遍历 dp[j] = max(dp[j], dp[j-nums[i]] + nums[i]);

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = 0;
        for(int i=0; i<nums.size(); i++){
            sum += nums[i];
        }
        if(sum%2 == 1) return false;
        int c = sum/2;
        vector<int>dp(c + 1, 0);
        for(int i=0; i<nums.size(); i++){
            for(int j=c; j>=nums[i]; j--){
                dp[j] = max(dp[j], dp[j-nums[i]] + nums[i]);
            }
        }
        if(dp[c] == c) return true;
        return false;
    }
};

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

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

相关文章

SpringBoot 整合RabbitMQ

SpringBoot 整合 RabbitMQ 概念 2007 年发布&#xff0c;是一个在 AMQP(高级消息队列协议)基础上完成的&#xff0c;可复用的企业消息系统&#xff0c;是当前最主流的消息中间件之一。 RabbitMQ是一个由erlang开发的AMQP&#xff08;Advanced Message Queue 高级消息队列协议…

Driver、CUDA、CUDNN和TensorRT的关系【深蓝学院】

文章目录 1、Driver、CUDA、CUDNN和TensorRT的关系2、如何选择CUDA版本2.1 如何选择CUDA版本的一个例子 3、手动安装实操 1、Driver、CUDA、CUDNN和TensorRT的关系 2、如何选择CUDA版本 上面的显卡架构及其对应的CUDA版本和稳定版本是怎么得出来的呢&#xff1f;请看下图&#…

【数据结构与算法】将含有n个元素的整数数组A[0…n-1]的元素循环右移1≤m<n)位。要求算法的空间复杂度为O(1)。

题目&#xff1a; Qestion:  设计一个算法 , 将含有 n 个元素的整数数组 A [ 0 … n − 1 ] 的元素循环右移 ( 1 ≤ m < n ) 位。要求算法的空间复杂度为 O ( 1 ) 设计一个算法,将含有n个元素的整数数组A[0…n-1]的元素循环右移(1≤m<n)位。要求算法的空间复杂度为O(1) …

[MySQL]MySQL数据库基础

[MySQL]MySQL数据库基础 文章目录 [MySQL]MySQL数据库基础1. 什么是数据库2. 主流数据库3. 服务器数据库表之间的关系4. 数据逻辑结构5. MySQL架构6. SQL语句分类7. 存储引擎 1. 什么是数据库 数据库是存储在计算机系统内的有结构的数据集合&#xff0c;是相关数据的集合&#…

【业务功能篇38】Springboot+activiti7 工作流引擎 增加网关组件、Assignment分配权限

在前面的一篇文章中&#xff0c;简单举例了一个 工单电子流&#xff0c;【业务功能篇36】Springbootactiviti7 工作流引擎_studyday1的博客-CSDN博客仅有一个子任务&#xff0c;这种一般是针对比较简单的一个遗留问题记录场景&#xff0c;今天再介绍一个&#xff0c;相对比较复…

rabbitMq怎么查看队列消息-Tracing日志

Trace 是Rabbitmq用于记录每一次发送的消息&#xff0c;方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的&#xff0c;需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 rabb…

每天五分钟机器学习:构建多特征的线性回归模型

本文重点 在实际应用中,有时候一个单一特征的线性回归模型可能无法很好地解释数据,因此我们可以构建多特征的线性回归模型来提高模型的预测能力。本文还是拿房价问题来举例,来看以下多特征的线性回归模型如何构建? 多特征的数据集 以房价预测为例,现在的样本特征不再是…

贵阳阿里云代理商:阿里云中国区副总裁李国欢:数字经济与实体经济如何融合

中国青年报客户端讯&#xff08;中青在线记者 于璧嘉&#xff09;6月21日&#xff0c;在第六届世界智能大会即将召开之际&#xff0c;阿里云中国区副总裁李国欢在接受媒体专访时表示&#xff1a;“数字经济已经成为社会生产力革命的一个重要生产要素。” 6月21日&#xff0c;阿…

Linux下GO IDE安装和配置(附快捷键)

目前&#xff0c;GoLand、VSCode 这些 IDE 都很优秀&#xff0c;但它们都是 Windows 系统下的 IDE。在 Linux 系统下我们可以选择将 Vim 配置成 Go IDE。熟练 Vim IDE 操作之后&#xff0c;开发效率不输 GoLand 和 VSCode。有多种方法可以配置一个 Vim IDE&#xff0c;这里我选…

mqadmin命令的使用

mqadmin命令的使用 F:\rocketmq-all-4.9.7-bin-release\bin>mqadmin The most commonly used mqadmin commands are: updateTopic Update or create topic deleteTopic Delete topic from broker and NameServer. updateSubGroup Update or create subscription group delet…

【虚拟化】虚拟机xml文件解析

文章目录 虚拟机xml文件解析nameuuidmemory/currentMemoryvcpubootcpuon_poweroffon_rebooton_crashdiskinterfaceinputgraphics 补充说明1.磁盘总线类型 虚拟机xml文件解析 name name # 虚拟机名称&#xff0c;具有唯一性&#xff0c;不可与已建立的虚拟机重复uuid uuid #虚…

MoblieNetV1、V2、V3、ViT四种Moblie模型的分析对比

1、MoblieNetV1 2017年提出&#xff0c;论文地址为&#xff1a;https://arxiv.org/pdf/1704.04861.pdf 1.1 相关知识 提到了标准卷积、深度可分卷积、点卷积&#xff0c;并分析了不同卷积结构的计算量&#xff0c;&#xff08;假设 D k D_k Dk​为ksize&#xff0c;M为卷积的…

在VMware Workstation虚拟机上安装centos服务,并使用xshell连接centos服务。

一、安装VMware Workstation 可前往http://www.kkx.net/soft/22239.html&#xff0c;附带有下载链接&#xff0c;和对应的破解码。 二、下载centos .iso格式文件 前往https://mirrors.aliyun.com/centos/7/isos/x86_64/下载。 以下两个&#xff0c;选择哪一个都行。 记得要下…

【MySQL进阶篇】学习笔记

文章目录 MySQL进阶学习前言1、存储引擎1.1 MySQL体系结构概览1.2 存储引擎介绍1.3 常见存储引擎的特点1.3.1 InnoDB的特点1.3.2 MyISAM1.3.3 Memory1.3.4 总结 2、索引2.1 索引介绍2.2 索引的结构2.2.1 前置知识2.2.2 索引结构的种类 2.3 索引的分类2.4 索引的使用2.4.1 索引的…

Vue3 通过ref获取 el-dialog 内容(组件)中的dom元素的问题

问题描述&#xff1a; 项目中&#xff0c;使用el-dialog组件展示内容&#xff0c;内容是自己封装的一个组件&#xff0c;组件中通过ref获取dom元素然后进行绘制echarts图形的。 问题是&#xff1a;在弹出el-dialog组件后&#xff0c;echarts图形没有渲染出来。刚开始还以为是自…

ArcPy学习心得系列(5)遥感数据中值滤波与均值滤波实现方法(不计入NoDATA)

在数据处理与应用的过程中,我们难免会遇到一些低质量的遥感数据,低质量遥感数据一般是由于天气因素导致的,在云量较多时,卫星传感器所采集到的地面信息被云层所遮挡,导致遥感图像成像过程中产生了较多噪声,对遥感数据的精确度造成了一定影响,如果不解决这些数据中的噪声…

超详细IDEA连接本地数据库以及使用教程

文章目录 前言一、IDEA连接本地数据库二、IDEA使用数据库操作 前言 IDEA的项目要想连接本地数据库&#xff0c;前提就是本地已经配置有数据库&#xff0c;并且可以使用 附Windows10 安装配置数据库教程: 超详细MySQL(免安装版)安装与配置教程 一、IDEA连接本地数据库 点击IDE…

什么是视频|孪生视频孪生,打造实时实景数字孪生应用

元宇宙概念下&#xff0c;虚拟世界和虚拟空间的讨论日益增多&#xff0c;其相关技术的应用和发展也备受关注。在众多技术手段中&#xff0c;数字孪生技术以虚实结合为主&#xff0c;架起虚拟世界与现实世界之间沟通的桥梁。 视频孪生更侧重从真实角度出发&#xff0c;打造实时…

【大数据之Hive】十九、Hive之文件格式和压缩

1 Hadoop压缩概述 Hive中的压缩算法与Hadoop中的压缩算法保持一致&#xff0c;可以把Hive当作Hadoop的一个客户端。 【大数据之Hadoop】十八、MapReduce之压缩 2 Hive文件格式 Hive表中常用的数据存储格式&#xff1a;text file&#xff08;行式存储&#xff09;、orc&#x…

Vue3 ElementPlus写的导航栏

Vue3 ElementPlus Vuex Router写的导航栏&#xff0c;效果如图&#xff1a; 导航条路径那里是自动的。 链接: https://pan.baidu.com/s/1pjqgR9QGbB2ZYIECPwNIoQ?pwdk5ew 提取码: k5ew 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦