zoukankan      html  css  js  c++  java
  • 【动态规划】背包

    01背包

    (dp[i][j]) 为处理完前 i 个物品,背包使用容量为 j 的最大价值。

    for(int i = 1; i <= n; ++i) {
        for(int j = w[i]; j <= W; ++j)
            dp[i][j] = max(dp[i][j], dp[i - 1][j - w[i]] + v[i]);
    }
    

    可以用滚动数组

    for(int i = 1; i <= n; ++i) {
        int t = i & 1;
        for(int j = w[i]; j <= W; ++j)
            dp[t][j] = max(dp[t][j], dp[1 - t][j - w[i]] + v[i]);
    }
    

    可以把滚动也省略了。

    for(int i = 1; i <= n; ++i) {
        for(int j = W; j >= w[i]; --j)
            dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
    }
    

    完全背包

    for(int i = 1; i <= n; ++i) {
        for(int j = w[i]; j <= W; ++j)
            dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
    }
    

    多重背包

    二进制分组优化

    单调队列优化

    二维费用背包

    分组背包

    有依赖背包

  • 相关阅读:
    pop指令的执行过程
    ipad 4.2 开发环境
    XP远程桌面
    停机问题、哥德尔定理
    看MIT的线性代数
    VizA项目继续推进
    port systemc to mac os x
    关于jar
    普桑
    拉突爾
  • 原文地址:https://www.cnblogs.com/purinliang/p/14333581.html
Copyright © 2011-2022 走看看