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

ARC201B Binary Knapsack

比赛中模拟赛的题,先来记录一下考场做法。

首先发现和普通背包问题的唯一不同就在于空间都是 \(2\) 的整数次幂的,这提示我们从这里下手。那么关于这种,我们只可能与二进制有关了,于是我们考虑选择一个在二进制上的贡献,并从高位向低位上看。我们发现,如果最高位上为 \(1\),那么这里也只能选一个数,而如果不选的话下一位可以多选两个数。这给了我们思路。我们设 \(f(i,j)\) 表示现在考虑到了第 \(i\) 位,至多选 \(j\) 个数。那么之后发现,如果这一位上要选 \(k\) 个数的话,那么一定是选前 \(k\) 大的,那么只需要枚举这一位选几个即可。定义 \(S(i)\) 为这一位的有序集合,\(S(i,j)\) 表示前 \(j\) 个数的和。定义 \(p_x^i\) 表示 \(x\) 的第 \(i\) 二进制位的值,那么有转移:

\[f(i,j)=\max_{k=0}^{\min(|S_i|,j)}\left\{S(i,k)+f(i-1,2(j-k)+[p_m^{i-1}==1])\right\} \]

其中 \(f(0,j)=S(0,j)\),这样我们就获得了一个 \(O(n^2\log m)\) 的做法。但是还是不能够通过本题。并且这个东西看起来也不是非常好维护的样子。那么也一定有一些性质在里面。之后通过打表注意到对于同一个 \(i\) 满足决策单调性,于是就双指针优化到了 \(O(n\log m)\) 了。

但是比赛时要求的是这个题的加强版,还额外有 \(Q\) 次不独立的修改,每一次将一个价值加 \(1\),并求。这个就没有办法用上面这个动规做了,需要额外想办法。

http://www.rkmt.cn/news/30767.html

相关文章:

  • LDC
  • 完整教程:由JoyAgent观察AI Agent 发展
  • Spark计算引擎
  • 173天隧道技术篇防火墙组策略ICMPDNSSMB协议出网判断C2上线解决方案
  • 实用指南:3DGS 如何理解它?
  • 面试总被追问k8s调度器工作原理, 收藏 == 学废
  • 题解:十二重计数法
  • 2025 年 10 月厨房排烟、厨房排烟罩、厨房排烟系统厂家最新推荐,资质、案例、售后三维测评与选购指南
  • # Ubuntu 根目录空间扩展操作手册(基于 RAID 关联磁盘 /dev/sdb2)
  • Perplexity Comet AI浏览器「等待网络链接」解决方案
  • 新地球
  • 实用指南:Android 常见界面布局详解
  • 2025 年 10 月食堂厨房设备厂家最新推荐,聚焦资质、案例、售后的食堂场景深度解读
  • 基于深度学习神经网络协同过滤模型(NCF)的视频推荐体系
  • 给安卓设置背景色的时候保持默认按钮样式(关于使用setBackgroundColor导致丢失默认按钮样式的问题)
  • 分片上传与断点续传实现详解
  • Kanass入门到实战(6) - 如何进行缺陷管理 - 指南
  • 数据处理方法汇总
  • 2025 年 10 月展示柜厂家最新推荐,技术实力与市场口碑深度解析!
  • 2025年10月益生菌品牌推荐榜:全维度对比与榜单解读
  • 2025年10月美容仪品牌推荐:无创无痛对比评测榜
  • 2025年10月中国遗产继承律师推荐榜:五强对比全解析
  • php特性
  • 2025年10月深圳近视手术医生推荐榜:五强对比与口碑评价
  • php_sha1函数特性
  • php非法参数
  • php原生类的使用
  • 2025 年 10 月仿石漆厂家最新推荐,精准检测与稳定性能深度解析
  • 下午选歌
  • 分治算法在查找第k小元素中的应用与分析