首页 > 其他分享 >[题目记录]一本通高手训练-01背包

[题目记录]一本通高手训练-01背包

时间:2024-09-28 16:01:14浏览次数:1  
标签:le 题目 队列 sum 01 背包 top 单调

题意

有 \(n\) 个物品, 每个物品体积为 \(s_i\), 价值为 \(v_i\), 求背包容量为 \(1,2,\cdots m\) 时最大价值.

\(n\le 1e6,m\le 1e5,s\le 300,v\le 1e9\)

时空限制 \(5s,512MB\)


题解

普通01背包复杂度 \(O(nm)\), 无法满足 \(n\le 1e6,m\le 1e5\). 发现 \(s\le 300\),可以考虑把 \(s\) 相同的扔到一起更新. 这样这道题变得类似于多重背包 , 区别在于多重背包每个物体的价值相同 , 但本题中物体价值不保证相同 .

多重背包的优化方式有两种 , 一种是二进制拆分 , 一种是单调队列 . 这道题由于价值不同 , 如果用二进制拆成若干组 , 会存在某种可能 , 需要的几个物体不能被表示出来 .

尝试单调队列 , 先把朴素列出来

\[f_i= \sum_{j}^{} f_j+sum_{(i-j)/w} \]

其中 \(w\) 代表当前考虑的体积 , \(sum_k\) 表示当前体积下前 \(k\) 大的价值和 .

模仿多重背包的单调队列做法 , 把 \(i\) 按照 \(\mod k\) 的值分类处理 . 对于每一类用一个单调队列维护可行范围内的最大的 \(f_j+sum_{(i-j)/w}\) .

分析单调性 : 设 \(i\) , \(j\) 是两个决策点 , 要更新 \(f_k\) 时 , \(i\) 不优于 \(j\) , 要求满足

\[f_i+ sum_{(k-i)/w}\ge f_j+sum_{(k-j)/w} \]

这时发现 , 维护的这个值并不符合单调性,因为当前更新的位置 \(k\) 变化的时候 , \(i\) 与 \(j\) 之间所取的若干个价值会发生变化 . 但是这个变化具有一种单调性 . 随着 \(k\) 的增大 , 用 \(f_i\) 来更新比 \(f_j\) 更新能多取的几个物品的价值递减 . 因此存在一个时刻 \(t\) , 使得 \(k<=t\) 时 \(f_i\) 更优 , 而 \(k>t\) 时 \(f_j\) 更优 .

对于每一对 \(i,j\) , 在 \(k>t\) 时 , \(i\) 就没有用了 , 我们需要把 \(i\) 从队列中扔掉 . 时刻 \(t\) 在原序列中并不单调 , 但是对于三个决策点 \(i,j,k\) , 若 \(t_{i,j}\ge t_{j,k}\) ,当 \(i\) 从队列中扔掉的时候 \(j\) 已经应该被扔掉 . 也就是说我们只需要维护一个 \(t\) 递增的决策点序列就可以了 .

仍然使用单调队列维护 , 维护的是前后的 \(t\) 的单调性 .

每次一个新决策点 \(i\) 入队 , 如果队列 \(q\) 中 \(t_{q_{top-1},q_{top}} \ge t_{q_{top},i}\) , 说明当前的 \(top\) 无用 , 把它扔掉 , 直到队头扔不掉 , 再把 \(i\) 加入.

标签:le,题目,队列,sum,01,背包,top,单调
From: https://www.cnblogs.com/youlv/p/18438068

相关文章

  • 2024 年全国大学生新质生产力大赛—数学建模赛项题目 B:金融违规交易的大数据分析 问题
    针对问题三,我们可以采取以下步骤进行聚类分析,并统计不同国家的涉案人员数量和交易金额总数。以下是具体的分析思路和方法:1.数据预处理清洗数据:确保数据中没有缺失值,并将需要的字段转换为合适的数据类型。选择聚类特征:选择与洗钱风险评分相关的指标作为聚类特征,例如交易金......
  • Acwing 801.二进制中1的个数
    题意:给定一个长度为$n$的数列,请你求出数列中每个数的二进制表示中$1$算法1(lowbit())0.预备知识1.原码:符号位加上真值的绝对值2.反码:正数的反码是其本身,负数的反码是在其原码的基础上符号位不变,其余各个位取反。3.补码:正数的补码就是其本身,负数的补码是在其反码的基础上+......
  • 结对项目——小学四则运算题目自动生成器
    这个作业属于哪个课程<计科22级34班>这个作业要求在哪里<结对项目>这个作业的目标<实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)>团队成员<杨富国(3122004587)、李思柔(3222004638)>Github项目地址https://github.com/wWchao-111......
  • [NOIP2017 提高组] 奶酪 题解
    题目背景NOIP2017提高组D2T1题目描述现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为 z=0,奶酪的上表面为 z=h。现在,奶酪的下表面有一只小老鼠Jerry,......
  • ACST2001 S2 2024 Spreadsheet
    ACST2001S22024SpreadsheetProjectTaskInaspreadsheet,createfourseparatesheets,labelled‘Parta’,‘Partb’,‘Partc’and‘Partd’.Partatocconfirmsomeoftheresultspresentedtoyouinweek7,onslide40-42.Thenanswerthefollowingqu......
  • E60 树形DP+贪心 P3574 [POI2014] FAR-FarmCraft
    视频链接:   P3574[POI2014]FAR-FarmCraft-洛谷|计算机科学教育新生态(luogu.com.cn)//树形DP+贪心O(nlogn)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=500005;inthead[N],to[N<<1],ne[N<......
  • 【Webpack--016】config文件include和exclude配置
    ......
  • 动手动脑01
    动手动脑01重新编写java测试00PlaninformationpublicclassPlanInformation{//变量id为整型,表示日报流水号,依次加一。//变量planid为字符串类型String,表示产品生产批次号(例如:2312-110,有8位字符组成,前四位表示年月,后三位表示序号)。//变量planname为字符串类......
  • 实现一个自动生成小学四则运算题目的命令行程序
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标实现一个自动生成小学四则运算题目的命令行程序项目成员本结对项目由--31220045......
  • P9019 [USACO23JAN] Tractor Paths P 题解
    P9019[USACO23JAN]TractorPathsP题解难度其实绝对不止蓝题。先考虑第一问。维护任意两点之间的最短路是困难的,难以dp或是采取其它方法解决。难以算最短路就转换思路,考虑从\(x\)走\(p\)步能走到哪。考虑到这个东西是有单调性的,也就是说对于\(x<y<z\),从\(x\)能走到......