• 背包问题总结


    背包问题是一大类问题。
    我们不妨设有(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))

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

    没了。

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

  • 相关阅读:
    sql server分布式事务解决方案 (笔记)
    深入理解Datatable(笔记)
    SQLSERVER 2005 实现文件读写操作
    局部变量、全局变量、堆、堆栈、静态和全局
    分布式事务DISTRIBUTED TRANSACTION
    SQLSEVER2005中找不到存储过程xp_getfiledetails 解决办法
    模式窗口
    理解析构函数的执行过程
    Oracle分页
    DataTable导出到Excel、GSV (转)
  • 原文地址:https://www.cnblogs.com/lnzwz/p/14264623.html
Copyright © 2020-2023  润新知