首页 > 其他分享 >动态规划之滚动数组

动态规划之滚动数组

时间:2024-04-08 18:31:18浏览次数:16  
标签:10 滚动 处理 数组 物品 动态 dp

熟悉动态规划的童鞋都知道,dp的状态方程通常都是二维数组及以上。我们总将其定义为dp[N][C],例如int dp[N][C],N=10^6,C=10^6,此时空间消耗为4*N*C=4×10^12,很大可能超过比赛中题目对空间的限制。那么我们是否可以优化它呢?

拿背包问题举例,我们通常将行范围定为物品个数,每处理当前物品只需在前一个物品基础上改变,所以每一轮需要处理的数组行数只有i和i-1这两行,这样我们便可以引申出“滚动数组”,只需要不断交替dp[0][]和dp[1][]就可以处理完N个物品。

如上图,处理物品的过程

①第1个物品:0->1;第2个物品:1->2;第3个物品:2->3;第4个物品:3->4;

②第1个物品:0->1;第2个物品:1->0;第3个物品:0->1;第4个物品:1->0;

如此一来,空间复杂度便会由O(NC)优化为O(C)

标签:10,滚动,处理,数组,物品,动态,dp
From: https://blog.csdn.net/weixin_73296216/article/details/137519189

相关文章

  • 动态规划和层次遍历 —— [NOIP2002 普及组] 过河卒
    题目如下:[NOIP2002普及组]过河卒题目描述棋盘上AAA点有一个过河卒,需要走到目标BB......
  • 数组截取slice splice split...
    slice()截取数组的一部分数据vararr=[10,20,10,30,40,50,60]res=arr.slice(1,4)从第一个开始,截取到第四个,第一个参数是开始截取的索引值,第二个是截取到哪个位置的索引值运行结果:splice()截取数组 数组名.splice(开始索引,截取多少个)vararr=[2,63,48,5,4,......
  • 算法打卡day37|动态规划篇05| Leetcode1049.最后一块石头的重量II、494.目标和、474.
    算法题Leetcode1049.最后一块石头的重量II题目链接:1049.最后一块石头的重量II 大佬视频讲解:最后一块石头的重量II视频讲解 个人思路和昨天的分割等和子集有些相像,这道题也是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。解法......
  • 动态内存管理
    目录1.为什么要有动态内存分配.2.动态内存分配的优点3.malloc和free3.1malloc3.2free4.calloc和realloc4.1calloc4.2realloc5.常见的动态内存的错误5.1对NULL指针的解引用操作5.2对动态开辟空间的越界访问5.3对非动态开辟内存使用free释放5.4使用free释放一块动态......
  • NumPy 基础知识:数组和矢量化计算
    目录NumPyndarray:多维数组对象创建ndarraysndarrays的数据类型使用NumPy数组进行运算基本索引和切片使用切片编制索引布尔索引花式索引转置数组和交换轴伪随机数生成通用函数:快速的逐元素数组函数数组面向数组编程将条件逻辑表示为数组运算数学和统计方法布尔数组......
  • css 实现排行榜向上滚动
    使用动画实现无线向上滚动复制一层dom,使用动画向上滚动,鼠标hover的时候暂停动画<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • 地址治理-标准地址库动态更新ETL方案设计
    一个高质量的地址治理项目,背后必然有一份高质量的标准地址库。但是标准地址库的建设工作大量依赖人工作业,由此遗留下3大问题。首先,人工作业很多都是通过一个小区或者一个街道的扫雷式建设地址库,作业量非常大,成本非常高。关键是会产生大量项目中实际不会用到的地址。其次,人工作业......
  • leetcode删除有序数组中的重复项
    一、题目给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你......
  • 数组的常规操作
        java中对数组的操作有遍历和拷贝两种,遍历指的是通过循环操作遍历数组的所有元素,简单理解就是通过循环操作访问数组中的所有元素,因此这里就要用到循环结构了。一般情况下,采用循环结构来遍历一维数组,采用循环的嵌套结构来访问来遍历多维数组。数组的拷贝操作指的将某......
  • Spring Data JPA应用之动态查询JpaSpecificationExecutor
    JPA提供了基于准则查询的方式即Criterial查询——Specification接口。该接口定义了一个toPredicate方法用例构造查询条件。在SpringBoot对SpringDataJPA的支持案例的基础上对该接口实操进行探讨。1)数据访问接口必须实现JpaSpecificationExecutor......