zoukankan      html  css  js  c++  java
  • DP-背包问题

      1.0-1背包问题

      问题描述:有n件物品,每件商品的质量为w[i],价值为从c[i]。现有一个质量为V的背包,问如何选取物品放进背包,使得背包内物品的总价值最大。每种商品只有一件。

      分析1:令dp[i][v]表示前i件商品恰好装入容量为v的背包中所能获得的最大价值。那么,对于第i件商品而言,它可以放入或者不放入。如果放入的话,问题就转化为前i-1件商品恰好装入容量为v-w[i]的背包中,所能获得的最大价值,此时dp[i][v]=dp[i-1][v-w[i]]+c[i]。如果不放的话,问题就转化为前i-1件商品恰好装入容量为v的背包中所能获得的最大价值,此时dp[i][v]=dp[i-1][v]。所以转移方程为dp[i][v]=max(dp[i-1][v-w[i]]+c[i],dp[i-1][v]),边界dp[0][v]=0,所以枚举i从1到n,v从0到V。

      

    for(int i=1;i<=n;i++){
        for(int v=w[i];v<=V;v++){
            dp[i][v]=max(dp[i-1][v],dp[i-1][v-w[i]]+c[i])
        }
    }
    View Code
  • 相关阅读:
    P4995 跳跳!
    P4306 [JSOI2010]连通数
    P1339 [USACO09OCT]热浪Heat Wave
    P2002 消息扩散
    P3388 【模板】割点(割顶)
    P1656 炸铁路
    P2863 [USACO06JAN]牛的舞会The Cow Prom
    P1516 青蛙的约会
    3.从尾到头打印链表
    2.替换空格
  • 原文地址:https://www.cnblogs.com/zfc888/p/10179378.html
Copyright © 2011-2022 走看看