BZOJ4910 : [Sdoi2017] 苹果树

问题等价于树形依赖背包,允许一条链每个点各免费一次。

f[i][j]f[i][j]表示按DFS序考虑到ii,体积为jj的最大收益。

先放入不能免费的物品,等遍历完儿子后再放入必选的物品,那么ii到根路径上所有点都只算了不能免费的部分。

然后将DFS序翻转,设h[i][j]h[i][j]表示按DFS序考虑到ii,体积为jj的最大收益。

等遍历完儿子后再放入必选的物品和不能免费的物品,那么ii到根路径上所有点都没有算。

如此一来,对于每个叶子ii,用f[i][j]+h[i][kj]f[i][j]+h[i][kj]更新答案即可。

对于不能免费的物品,需要用单调队列优化转移。

时间复杂度O(nk)O(nk)

 

  

posted @   Claris  阅读(1320)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示