题解 [ARC096F] Sweet Alchemy

预处理出子树的大小重量和,变为一个多重背包问题,1 号点可以取无限次,剩余点最多可取 D 次。设 u 子树大小为 Su,子树重量为 Wu,则物品 i 体积为 Wi,价值为 Si,发现 Si 非常小,考虑怎么利用。

一个经典的错误贪心是按照 SiWi 从大到小排序,依次取。考虑这个贪心什么时候是正确的。若 i<j,且选了至少 Si 个物品 j,且物品 i 还有至少 Sj 个可选,这必定是不优的,因为可以去掉这 Si 个物品 j,换为 Sj 个物品 i,保证价值相同时,代价更小。

因为 Sin50,于是可以让每个物品保留 min(n,D) 个做多重背包,二进制分组,最后对于每个体积贪心取即可。注意将体积与价值反过来,否则状态数太大。这样总价值就是 O(n3) 的了。

时间复杂度 O(n4logn)

这个题的启示是在体积或价值有一维较小,一维较大时,可以通过贪心将另一维减小。

posted @   Terac  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示