• 背包问题总结


    背包问题是一大类问题。
    我们不妨设有(n)个物品,背包容量为(m),每个物品大小为(c),个数为(d),价值为(w)
    大写字母表示求和。
    01背包,完全背包,分组背包:直接dp即可。时间复杂度(O(nm))
    多重背包:单调队列优化或二进制拆分。(O(nm))(O(nmlogd))。枚举余数进行单调队列。
    树形背包:选择父亲才能选择儿子。
    树形dp或者dfs序列上dp。建议后者。(O(nm))
    超大背包:体积很大,价值很小。
    按照价值DP即可。dp(i,j)表示考虑到i,价值为j,最小体积。(O(n^2w)),即(O(nW))
    价值体积都很大的背包:中途相遇法。(O(2^{frac{n}{2}}))
    01背包,(n,m)都比较大,但(c)很小:
    把物品按照(c)整理。
    按照c去依次计算,设(f(x,i))表示考虑到体积为(x)的物品,容量为(i)
    对于模(x)意义下相等的数,从小到大满足决策单调性,使用分治,可以把复杂度降低至(O(nlogn+mclogm))
    分数背包:直接按照(frac{w}{c})排序,贪心选择。(O(nlogn))。‘
    超多背包:(m,d)都很大。只有(w)比较小。
    考虑分数背包的贪心做法,但这个显然是错误的。
    不过可以发现,只有对于每个物品的零散部分才可能出错。
    把每个物品拆分为两个部分:小于等于(w)的部分。大于(w)的部分。
    后者直接贪心即可。前者使用“超大背包”和单调队列优化即可。(O(n^2w^2))

    还有几种不属于背包问题,但是差不多的问题。
    完全背包计数:参见此题
    没有容量,只有价值或者代价,同时选择有额外价值的背包:
    考虑文理分科模型,或者某种最小割。

    没了。

    希望自己情感事业一帆风顺。

  • 相关阅读:
    nodejs游戏服务器开发(二)---mysql连接
    nodejs游戏服务器开发(一)---socket连接
    《Metasploit渗透测试指南》命令参考列表
    Nmap脚本使用总结(转乌云) 下
    Nmap的介绍和使用(乌云转) 上
    局域网win7系统:虚拟机kali 做端口映射
    漏洞检测的几种方法
    BurpSuite 1.6.27 最新破解版操作
    Metasploit基础
    龙灵:特邀国内第一讲师“玄魂” 在线培训黑客神器Kali Linux
  • 原文地址:https://www.cnblogs.com/lnzwz/p/14264623.html
Copyright © 2020-2023  润新知