尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

回退背包

回退背包
📅 发布时间:2026/6/19 14:53:01

回退背包问题(线段树分治):

\(Content\):

给定\(n\)个物品,编号为\(i\)的物品有质量\(w_i\)和价值\(v_i\)以及一个体积\(V\)。初始时背包没有可选物体。

有\(m\)次操作,对于每次操作,给出一个整数\(op\)和\(x\):

若\(op=1\),向背包的可选范围内添加\(x\)号物品;
若\(op=2\),从背包的可选范围内删除\(x\)号物品。

每次操作后求01背包的方案数或最大值。

\(Solution:\)

对于方案数:

求方案数的\(dp\)代码如下:

for(int i=1;i<=n;i++)for(int j=V;j>=w[i];j--)f[j]+=f[j-w[i]];

考虑以下一个问题,若每次将一个物体放进可选范围后,下一次操作便将它取出,求方案数呢?
只需要把这件物品的贡献再减去即可,注意要正序枚举。
易得以下代码:

for(int j=w[i];j<=V;j++)f[j]-=f[j-w[i]];

而在背包问题中,物体放入背包的顺序对于答案是没有影响的,所以回退背包关于方案数的解法就等价于上面的解法。

板子题
code

对于最大值:

可以发现假发加法是可逆的,但是取\(max\)是不可逆的,所以关于方案数的解法对于最大值问题自然不适用。

对于最大值问题,可以采用线段树分治来做。

首先离线下来所有询问,记录每个物品的放入时间和取出时间。在时间轴上建立一棵线段树,对于线段树的每个节点都开一个\(dp\)数组,然后将每个物品类放入与其有交的区间中。
然后遍历线段树,每一个节点的\(dp\)数组都可以由它的父亲转移而来(父节点的\(dp\)数组加上新增的物品)。
最后每个叶节点的答案就是每个时间点的答案。

但是这样处理空间复杂度太大了。
而我们其实只需要对每一层开一个\(dp\)数组,每次递归重新赋值就足以记录了。

线段树分治板子
code

回退背包维护最大值板子
code

\(Summary:\)

对于回退背包问题,通解是线段树分治,对于求方案数的题目,可以使用一些小技巧来解决。

相关新闻

  • module jdk.compiler does not “以” com.sun.tools.javac.processing” to unnamed module
  • nginx 响应html内容
  • logicFlow ,画布节点自定义

最新新闻

  • 指纹浏览器行为生物指纹(下):键盘敲击节奏与滚动行为的仿生学建模
  • 大连闲置首饰变现攻略,本地高口碑回收门店合集 - 讯息早知道
  • 2026 福州名表回收深度实测,教你避开行业压价套路 - 讯息早知道
  • 甄别杭州黄金回收猫腻:称重、扣损耗套路避坑干货总结 - 奢侈品回收评测
  • DREAM3D材料科学3D分析完全指南:从零开始掌握专业数据处理
  • 2026 杭州黄金回收权威星级榜单测评,收的顶综合评分位居行业前列 - 奢侈品回收评测

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号