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

01背包问题 刷题笔记

思路 dp
用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 
记住f[i][j]本身是个价“价值” 
考虑两种状态 是否将第i件物品放入背包里面
将背包的体积从小到大递增来进行考虑
首先 考虑条件 如果当前增加的体积放不下下一件物品 
则该体积 可以获得的最大值可以直接继承上一个f[i-1][j] 
如果可以放下 则比较 放入与不放入谁获得的值较大
即 f[i-1][j]与f[i-1][j-v[i]]+w[i]比较
 //-v[i]是为了减去放入后的背包体积
 加w[i]是为了加上放入后获得的价值
 每一次存下的 都是基于考虑到当前物品 的最优选择
 比方说 前面已经进行了i件物品的选择 
 获得了一个基于i件物品的最大值
  这时候 第i+1件物品突然出现 体积为1,价值1000000;
  那么当背包体积只有1时的最大值会立刻被更新成100000;
  此时仍然是最优选择
  代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1010;
int f[N][N];
int w[N],v[N];
int n,m;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>v[i]>>w[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(j<v[i]){
            f[i][j]=f[i-1][j];
            }else{
                f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);
            }
            
        }
    }
    cout<<f[n][m];
    return 0;
}

优化思路

二维到一维 

我们发现 考虑第i件物品时的最大值来自前面一层i-1件物品的最大值

也就是说 所有的当前层 都只来自上一层的最大值

而上上层已经不重要了

因此有没有可能直接删掉层数记录

观察发现f[i][]是从f[i-1][]这一层更新出来的

此时我们直接删除i

只使用j

观察式子f[j-v[i]]+w[i]

也就是说 如果我们逆序更新的话 需要使用和比较的数是j-v[i]

这个数是绝对小于j的 如果将j从m往0更新

保证了更新时只有大于等于j的数被覆盖掉了

而我们需要用的 j-v[i]则被保留下来

举例

如果我们逆序更新的话

假设 原来 f[j](1-5)是

1 2 5 7 9

然后我们逆序更新

for(int i=0;i<n;i++){
        for(int j=m;j>=v[i];j--){
            f[j]=max(f[j],f[j-v[i]]+w[i]);
        }
    }

假设 此时j=5,v[i]=2,    f[j-v[i]]+w[i]=11那么

我们和上一个f[3]比较 比较完了以后将上一个f[5]覆盖掉

此时f[j](1-5)的情况为

1 2 5 7 11

然后当j=4;

v[i]=1;

f[j-v[i]]+w[i]=9;

即我们需要用的是f[3]

此时f[3]并没有被污染 

执行以后

f[j](1-5)的情况为

1 2 5 9 11

以此类推我们的目的达到了

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int f[N];
int w[N],v[N];
int j[N]; 
int n,m;
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        //int x,y;
        cin>>v[i]>>w[i];
        //v[i]=x;
        //w[i]=y;
    }
    for(int i=0;i<n;i++){
        for(int j=m;j>=v[i];j--){
            f[j]=max(f[j],f[j-v[i]]+w[i]);
        }
    }
    cout<<f[m];
    return 0;

相关文章:

01背包问题 刷题笔记

思路 dp 用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 记住f[i][j]本身是个价“价值” 考虑两种状态 是否将第i件物品放入背包里面 将背包的体积从小到大递增来进行考虑 首先 考虑条件 如果当前增加的体积放不下下一件物品 则该体积 可以获得的最大值可以直接…...

docker安装包(Linux和windows)

Linux——docker-20.10.9.tgz 网盘地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1T3qfVZ-uT-vMAo8w6heTMw 提取码&#xff1a;qu85 windows——docker19.03.1 链接&#xff1a;https://pan.baidu.com/s/1mK6hqhkGCBs6tdBHJxrdPw 提取码&#xff1a;4dkj...

RabbitMQ 安装使用

文章目录 RabbitMQ 安装使用安装下载 Erlang下载 RabbitMQ 的服务安装好后看是否有 RabbitMQ 的服务开启管理 UIRabbitMQ 端口使用一览图 使用输出最简单的 Hello World&#xff01;生产者定义消费者消费消息小拓展 RabbitMQ 安装使用 安装 下载 Erlang RabbitMQ 是用这个语…...

echarts x轴名称过长tip显示全称

xAxis的axisLabel的内容如下&#xff1a; axisLabel: { rotate: -45, color: document.body.className.indexOf(custom-f4c46d) > -1 ? #fff : #343434, // 显示省略号操作&#xff08;第一步&#xff09; formatter: function (value) { var val if (value.length >…...

js和css阻塞问题

面试常见问题 css 加载会不会阻塞 js 的加载&#xff1f;&#xff08;不会&#xff09;css 加载会不会阻塞 js 的执行&#xff1f;&#xff08;会&#xff09;css 加载会不会阻塞 DOM 的解析&#xff1f;&#xff08;不会&#xff09;css 加载会不会阻塞 DOM 的渲染&#xff1…...

MySQL 的基础操作

数据库的基础操作 1. 库操作2. 表的操作3. 数据类型 数据库是现代应用程序中至关重要的组成部分&#xff0c;通过数据库管理系统&#xff08;DBMS&#xff09;存储和管理数据。 1. 库操作 创建数据库 创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例&a…...

【python进阶篇】面向对象编程(1)

面向对象编程——Object Oriented Programming&#xff0c;简称OOP&#xff0c;是一种程序设计思想。OOP把对象作为程序的基本单元&#xff0c;一个对象包含了数据和操作数据的函数。 在Python中&#xff0c;所有数据类型都可以视为对象&#xff0c;当然也可以自定义对象。自定…...

力扣面试经典150 —— 6-10题

力扣面试经典150题在 VScode 中安装 LeetCode 插件即可使用 VScode 刷题&#xff0c;安装 Debug LeetCode 插件可以免费 debug本文使用 python 语言解题&#xff0c;文中 “数组” 通常指 python 列表&#xff1b;文中 “指针” 通常指 python 列表索引 文章目录 6. [中等] 轮转…...

[密码学]入门篇——加密方式

一、概述 加密方法主要分为两大类&#xff1a; 单钥加密&#xff08;private key cryptography&#xff09;&#xff1a;加密和解密过程都用同一套密码双钥加密&#xff08;public key cryptography&#xff09;&#xff1a;加密和解密过程用的是两套密码 历史上&#xff0c…...

构建前后端分离项目常用的代码

构建前后端分离项目常用的代码 1.代码生成器 import com.baomidou.mybatisplus.generator.FastAutoGenerator;import com.baomidou.mybatisplus.generator.config.OutputFile;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;​import java.util.…...

2575. 找出字符串的可整除数组(Go语言)

https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/ 在看题解之前&#xff0c;我的代码是以下这样&#xff1a; package mainimport ("fmt" )func main() {fmt.Println(divisibilityArray("998244353", 3)) }func divisibilityArray…...

Redis与 Memcache区别

Redis与 Memcache区别 1 , Redis 和 Memcache 都是将数据存放在内存中&#xff0c;都是内存数据库。不过 Memcache 还可用于缓存 其他东西&#xff0c;例如图片、视频等等。 2 , Memcache 仅支持key-value结构的数据类型&#xff0c;Redis不仅仅支持简单的key-value类型的数据&…...

#QT(智能家居界面-界面切换)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 &#xff08;1&#xff09;创建一个新界面&#xff08;UI界面&#xff09; &#xff08;2&#xff09;可以看到新加入一个ui文件&#xff0c;双击打开&#xff0c;设置窗口大小与登录界面一致 &#xff08;3&#xff09;加入几个PUS…...

js拓展-内置对象

目录 1. 数组对象 1.1 数组的四种方式 1.2 JS中数组的特点 1.3 常用方法 2. 日期对象 2.1 日期对象的创建 2.2 日期对象的方法 2.3 案例&#xff1a;输出现在的时间 3. 全局对象 3.1 字符串转换成数字类型 3.2 编码解码函数 1. 数组对象 注&#xff1a;数组在JS中是一…...

【李沐精读系列】GPT、GPT-2和GPT-3论文精读

论文&#xff1a; GPT&#xff1a;Improving Language Understanding by Generative Pre-Training GTP-2&#xff1a;Language Models are Unsupervised Multitask Learners GPT-3&#xff1a;Language Models are Few-Shot Learners 参考&#xff1a;GPT、GPT-2、GPT-3论文精读…...

Libevent的使用及reactor模型

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&#xff1b;源代码相当精炼、易读…...

查看Linux服务器配置

# chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务 # ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连…...

【机器学习】包裹式特征选择之递归特征添加法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…...

解决cs不能生成Linux木马的问题

要解决的问题&#xff1a;众所周知&#xff0c;msf上面的shell或者是其他的shell想反弹给cs默认情况下是只支持windows的&#xff0c;因为cs的监听模块默认没有linux的&#xff0c;但是有些主机就是用linux搭建的&#xff0c;这可怎么办呢。就要用到一个插件CrossC2。 下载插件…...

vue3组件通信方式

不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可以实现子父组件通信 全局事件总线$bus:可以实现任意组件通信 pubsub:发布订阅模式实现任意组件通信…...

PPTXjs:零安装!在浏览器中完美预览PPTX文件的终极方案

PPTXjs&#xff1a;零安装&#xff01;在浏览器中完美预览PPTX文件的终极方案 【免费下载链接】PPTXjs jquery plugin for convertation pptx to html 项目地址: https://gitcode.com/gh_mirrors/pp/PPTXjs 还在为无法在线查看PPTX文件而烦恼吗&#xff1f;PPTXjs为你带…...

专业级Visual C++运行库自动化修复方案:3步彻底解决系统兼容性问题

专业级Visual C运行库自动化修复方案&#xff1a;3步彻底解决系统兼容性问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO项目提供了终极…...

Helixer深度学习基因预测:3步解锁基因组注释的AI新境界 [特殊字符]

Helixer深度学习基因预测&#xff1a;3步解锁基因组注释的AI新境界 &#x1f9ec; 【免费下载链接】Helixer Using Deep Learning to predict gene annotations 项目地址: https://gitcode.com/gh_mirrors/he/Helixer 在基因组学研究领域&#xff0c;传统的基因预测方法…...

从 .NET 8 到 .NET 9 RC:C# 14 AOT 对 Dify 客户端的 ABI 兼容性断层已确认——3 类 runtime panic 场景、2 种 patch 方案、1 小时热修复指南

第一章&#xff1a;C# 14 原生 AOT 部署 Dify 客户端 安全性最佳方案C# 14 原生 AOT&#xff08;Ahead-of-Time&#xff09;编译能力显著提升了 .NET 应用的启动性能与攻击面收敛能力&#xff0c;结合 Dify 的 RESTful API 设计&#xff0c;可构建零依赖、无 JIT、内存隔离的客…...

手把手教你用SystemVerilog断言(SVA)给仲裁器模块写“活”的Spec文档

用SystemVerilog断言为仲裁器构建可执行规格的实战指南 在数字芯片验证领域&#xff0c;断言&#xff08;Assertion&#xff09;已经成为连接设计意图与验证实施的关键桥梁。本文将从一个四端口仲裁器的实际案例出发&#xff0c;演示如何将自然语言描述的设计规格转化为精确的S…...

Vue3 + AntV X6 实战:从零封装一个可拖拽连线的关系图组件(附完整代码)

Vue3 AntV X6 实战&#xff1a;封装高可定制的关系图组件 在复杂业务系统中&#xff0c;可视化关系图谱正成为不可或缺的交互界面。本文将带你从零构建一个生产级的关系图组件&#xff0c;基于Vue3和AntV X6实现节点拖拽、动态连线、自动布局等核心功能&#xff0c;最终封装成…...

1200 万次攻击零得手!CVE-2023-33538:史上最离谱的 TP-Link 路由器漏洞攻防战

2026年4月15日&#xff0c;Palo Alto Networks旗下顶级威胁研究团队Unit 42发布了一份足以颠覆整个行业认知的季度威胁报告。报告中一个不起眼的章节&#xff0c;却在安全圈引发了轩然大波&#xff1a; 自2025年6月漏洞POC公开以来&#xff0c;全球范围内已监测到超过1200万次针…...

抖音批量下载神器:三分钟搞定无水印视频采集的完整指南

抖音批量下载神器&#xff1a;三分钟搞定无水印视频采集的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

美团与中科院GENERAL365:常识推理测试揭示顶尖AI模型仅获62分

这项由美团与中国科学院大学联合开展的研究&#xff0c;以预印本形式发布于2026年4月13日&#xff0c;论文编号为arXiv:2604.11778&#xff0c;完整标题为《GENERAL365: Benchmarking General Reasoning in Large Language Models Across Diverse and Challenging Tasks》&…...

三菱FX系列PLC实现ModbusTCP通讯

1.实现方案采用ComeMeal-FX模块实现ModbusTCP通讯&#xff0c;用于MES、SCADA、DCS等上位机系统以太网通讯三菱FX系列PLC&#xff0c;ComeMeal-FX模块适用于三菱FX1S、FX1N、FX2N、FX3U、FX3G、FX3S系列PLC的以太网扩展&#xff1b;ComeMeal-FX模块采用三通设计&#xff0c;不占…...