代码随想录算法训练营(总结)|动态规划总结篇

news2024/11/17 3:45:01

一、动态规划五部曲

  1. 确定dp及其下标的含义
  2. 确定递推关系式
  3. 初始化值
  4. 确定遍历顺序
  5. 验证

二、01背包问题

1. 基本理解

理解:所谓的01背包问题,其关键在于物品只能放入1次,不能够重复利用,因此称呼为01背包问题。与完全背包的区别在于,完全背包问题中,物品能够无限次的放入。

  1. 二维和一维dp的创建问题:
    (1)二维dp[i][j]的含义为:从下标为0-i的物品中放入背包容量为j的背包中,其价值为最高
    (2)一维dp[i]的含义为:背包容量为i的背包中,能够容纳的物品的最高价值
  2. 递推关系
    (1)二维dp:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+values[i]);含义:对于物品i放入容量为j的背包中,可以选择不放,则是dp[i-1][j],亦可以放入,则需要更新背包容量dp[i-1][j-weight[i]]+values[i],取两者的最大值即可
    (2)一维dp:dp[j]=max(dp[j],dp[j-weight[i]]+values[i]);含义:对于容量为j的背包,可以选择将物品i放入,也可以不放入。
  3. 遍历顺序
    (1)对于二维dp来说,先背包后物品,或者先物品后背包都是可以的。且对于物品和背包来说都是从小开始遍历。
    (2)对于一维dp来说,我们只能是先物品后背包了。且对于背包只能是倒序。
    代码如下:
    for(int i = 0; i < nums.size(); i++) {
        for(int j = target; j >= nums[i]; j--) { // 每一个元素一定是不可重复放入,所以从大到小遍历
            dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
        }
    }
    

这里就存在疑惑了,为啥只能先物品后背包,背包又为啥只能是倒序

  • 先来解决为啥只能是倒序的问题:
    由于物品的循环是在外,背包的循环是在内,针对同一个物品,背包中只能存在一个,如果是倒序遍历,即背包容量从大到小变化的过程中,大背包先放入了物品i,此时背包容量缩小,而缩小的背包dp[j - nums[i]]中没有放入物品i,因此可以保证物品仅仅放入了一次
    而如果是正序遍历的话,在小背包中放入了物品i,此时的dp[j](dp[j - nums[i]])将会影响到后续的dp[j],会导致物品被多次放入。
  • 再来解决为啥必须先物品后背包:
    如果先背包后物品会导致,一个容量的背包中只放入了一个物品。

2. 不同的递推关系式

在上面的递推关系式,仅仅只包含了一种情况,其实题目是多样的。

  • 题目类型1:对于容量为j的背包,最多能放价值多少的物品:dp[j]=max(dp[j],dp[j-weight[i]]+values[i]);
  • 题目类型2对于容量为j的背包,装满这个背包能有几种方法(求的是组合问题):dp[j]+=dp[j-weight[i]]
  • 题目类型3:对于容量为j的背包,最多能装入几个物品:其实类似于类型1,只是value等于1

其实整体来说,总共也就加粗的两种类型(目前只碰到)

三、完全背包问题

1. 基本理解

理解:完全背包与01背包的区别在于,完全背包中的物品能够被无限次放入。

2. 类型的区别

  1. 组合问题:先物品后背包
  2. 排列问题:先背包后物品

代码随想录背包总结

背包总结(代码随想录)

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

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

相关文章

【深度学习】计算机视觉(十)——Faster RCNN(实践篇)

文章目录 写在最前面 step1&#xff1a;相关说明step2&#xff1a;Prerequisites安装要求tensorflow-gpu1. 安装和测试2. 错误提示① numpy版本② tensorflow版本③TensorRT step3&#xff1a;Installation1. Update your -arch2. Install the Python COCO API3. setup VOC4. D…

【VM服务管家】VM4.2平台SDK_6.4 结果获取类

目录 2.4.1 数据结果&#xff1a;通过流程输出或者模块输出获取数据结果的方法2.4.2 流程回调&#xff1a;某个流程运行开始与结束的回调方法 2.4.1 数据结果&#xff1a;通过流程输出或者模块输出获取数据结果的方法 描述 环境&#xff1a;VM4.2 VS2013及以上 现象&#xff…

从不自量力到 AI 助力,我如何翻译完一整本英文书

披露和声明&#xff1a; 本文提及的翻译作品系使用 AI 技术制作&#xff0c;并经人工调整&#xff0c;具体步骤如文中所述。本文在后期修改过程中使用 ChatGPT 辅助&#xff0c;目的为精简原版中的口语化表述。我的英文水平有限&#xff0c;翻译这本书主要是为了自我学习&…

自动驾驶— Planning - Udacity Self-Driving Car Engineer

第六讲规划 6.1规划简介 在规划中&#xff0c;我们结合了高清地图、定位和预测来构建车辆的轨迹。规划的第一步是路线导航&#xff0c;重点是如何在地图上从A到B。路由以地图数据作为输入&#xff0c;并输出可导航路径。手机上的导航系统就是路线规划的一个例子。在Apollo中&…

高性能——零拷贝

目录 背景 零拷贝定义 传统I/O执行流程 背景 零拷贝算是一个老生常谈的问题啦&#xff0c;很多顶级框架都用到了零拷贝来提升性能&#xff0c;比如我们经常接触到的Kafka 、RocketMQ、Netty 。 零拷贝定义 “拷贝”:就是指数据从一个存储区域转移到另一个存储区域.“零”…

games103——作业2

实验二主要使用隐式积分法以及PBD法完成布料仿真 完整项目已上传至github。 文章目录 基于物理的方法弹簧系统单个弹簧多个弹簧弹簧网络结构化弹簧网络(Structured Spring Networks)非结构化弹簧网络(Unstructured Spring Networks)三角网格表示 代码 求解质量弹簧系统的显示积…

UG NX二次开发(C++)-用UF_OBJ_cycle_objs_in_part遍历对象

文章目录 1、前言2、在UG NX中创建多个体3、创建UF_OBJ_cycle_objs_in_part的使用函数3.1 首先声明函数&#xff1a;3.2定义函数代码3.3 函数调用代码3.4 测试结果 1、前言 UG NX二次开发中&#xff0c;比如体、面、边等&#xff0c;在NXOpen中可以通过Collection来实现&#…

华硕ROG|玩家国度冰刃6双屏GX650RX Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原

华硕ROG|玩家国度 冰刃6双屏 GX650RX Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原 文件地址&#xff1a;https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 &#xff0c;安装结束后带隐藏分区以及机器所有驱动软件 需准备一个…

【告警通知】Java项目统一异常捕获处理【钉钉告警推送消息】

基础描述 在实际业务中&#xff0c;很多时候都是被动获取系统业务异常&#xff0c;如通过业务部门或者通过客户反馈说某个功能不行时&#xff0c;这样显得系统很被动和呆板在SpringBoot中有统一异常处理可以来实现&#xff0c;当我们检测到非业务异常时&#xff0c;比如空指针…

《SpringBoot中间件设计与实战》第2章 服务治理,超时熔断

需求背景 在流量较大的场景下,举个例子,用户在电商平台下单后开始跳转到在线收银台进行支付。由于支付渠道和网络环境随时都有可能发生问题,那么你该怎么保证支付系统的可靠性呢? 保证支付系统的可靠性需要考虑的点非常多,但这里有一个最直接和重点的内容就支付响应时长…

【王道·计算机网络】第三章 数据链路层【未完】

一、功能 研究思想&#xff1a;水平方向个数据链路层的差距 1.1 数据链路层基本概念 结点&#xff1a;主机、路由器链路&#xff1a;网络中两个节点之间的物理通道&#xff0c;传输介质包含&#xff1a;双绞线、光纤、微波。分为&#xff1a;有线链路、无线链路数据链路&…

TIM输入不捕获-STM32

TIM输入不捕获-STM32 IC(Input Capture) 输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入…

【Linux】进程学习(2)---理解进程操作

文章目录 查看进程通过系统目录查看通过ps命令查看 通过系统调用获取进程标识符通过系统调用创建进程初识fork函数fork函数的返回值 进程状态阻塞与运行状态Linux内核源码中的进程状态运行状态-R浅度睡眠状态-S深度睡眠状态-D暂停状态-T僵尸状态-Z死亡状态-X 查看进程 通过系统…

操作系统引导(开机过程)

操作系统安装在C盘中&#xff0c;其一步步启动的过程如下&#xff1a; 操作系统要启动&#xff0c;操作系统的数据需要先被放入主存里。 如图所示&#xff0c;计算机的主存由RAM和ROM组成&#xff0c;ROM芯片被集成在电脑主板上&#xff0c;里面存储的是BIOS&#xff08;Basic…

【组合数学算贡献+枚举】CF816div2 C. Monoblock

题解都看了半天才懂 Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始的思路是这样的&#xff1a; 只能说&#xff0c;想到了更换枚举对象&#xff0c;然后组合数学算贡献 也想到了修改操作与&#xff08;a[i]和a[i-1]&#xff09;有关 但是我想的是枚…

在Linux上搭建gitlab以及自动化编译部署的完整流程

一、安装gitlab 首先下载gitlab的安装包&#xff0c;地址如下&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/bionic/main/g/gitlab-ce/ 然后安装下载的包即可&#xff0c;一般还需要安装openssh-server等依赖包&#xff0c;在安装gitlab包之前可以…

【MongoDB】二、MongoDB数据库的基本操作

【MongoDB】二、MongoDB数据库的基本操作 实验目的实验内容任务一&#xff1a;&#xff08;1&#xff09;创建数据库newdb&#xff08;2&#xff09;在数据库newdb中创建集合mycollection&#xff08;3&#xff09;在集合mycollection中插入以下数据&#xff1a;&#xff08;4&…

如何安装 Auto GPT 4:分步指南

动动发财的小手&#xff0c;点个赞吧&#xff01; 您对尝试最新最好的文本生成技术感到兴奋吗&#xff1f; Auto GPT 4 因其令人印象深刻的功能而广为人知&#xff0c;但启动和运行它似乎令人望而生畏。幸运的是&#xff0c;我们在这里[1]提供安装 Auto GPT 4 的分步指南。 1. …

快手sig3 48位-unidbg

研究某手app的小伙伴都了解sig3有两个版本&#xff0c;低版本的是42位&#xff0c;高版本的48位。 废话不多说&#xff0c;先抓个包&#xff1a; 上一个当前最新版本的48位sig3&#xff0c;我们以搜索接口为例&#xff0c;效果如图&#xff1a; 在上面可以看到使用unidbg的方式…

【深度学习】计算机视觉(11)——Faster RCNN(工具篇)

文章目录 1 gcc编译报错1.1 错误提示“ld: cannot find -lm/-lc/-lpthread”1.2 解决方法&#xff1a;安装glibc工具1.3 解决方法&#xff1a;修改sources.list1.4 解决方法&#xff1a;软连接 2 Permission denied3 运行报错3.1 module tensorflow has no attribute 3.2 No mo…