ACM——划水ing——背包讨论

来源:互联网 发布:北师大网络信息门户 编辑:程序博客网 时间:2024/05/20 01:38

传统背包问题

根据 重量 W 价值 V 物品个数 S

对于背包剩余容量 C

逐一枚举物品,对 0-C  依次往后 dp

所以复杂度为  S*C


而除此

我们还可以暴力枚举 对于每个物品选择或不选择

其复杂度为

2^S

如果分别暴力枚举前一半 和 后一半

再针对前一半 排序后一半的总W后 二分查找

其复杂度可以优化为

记 P = 2^(S/2)

复杂度 = P+P+PlogP(排序) + PlogP(二分查找)


而如果对于这样一种背包模型

有N个堆 每个堆有Si个物品 

最多从每个包中选择一个物品

如果背包DP刷一遍 是 N*S*C

而二分查找是

P=(S+1)^N

复杂度 = P+P+PlogP(排序) + PlogP(二分查找)


枚举二分的复杂度 与 C无关


待续……


0 0
原创粉丝点击