背包的一些idea

Posted yinwuxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了背包的一些idea相关的知识,希望对你有一定的参考价值。

题解:

给出n个物品,每次能使用l-r之间的物品,问能不能表示出k,m次询问

k<=100,m,n=1e5

想了线段树分治 发现是k^2(n+m)logn

claris告诉我可以直接分治

我们对mid-r mid-l分别求一次背包

这样是nklogn的

我们就可以对包含mid的公司做处理

o(k) 查询

for(i=0;i<=k;i++)ans|=f[l][i]&g[r][k-i]

然后就解决了

还有个问题是怎么找对应mid的区间

我的思路是对每层都枚举所有询问暴力二分一下h的后继(把所有区间起点搞出来)

这样是mlog^2 n (虽然不影响)

claris提供了一种mlogn的做法

原理是每个有效点只会进入log次

做法就是每次对不在区间内的扔了 做好的也扔了(不然指数级递增的)

以上是关于背包的一些idea的主要内容,如果未能解决你的问题,请参考以下文章

背包问题(01背包,完全背包,多重背包)

0/1 背包 - 对 Wiki 伪代码的一些说明

背包真假专题

背包之01背包完全背包多重背包详解

背包问题之0-1背包

01背包&完全背包