zoukankan      html  css  js  c++  java
  • 三种简单背包问题模板:01背包、完全背包、多重背包

    01背包

    概念:给定n种物品的价值和重量,每种物品最多只能取一次。求出当背包容量为m时能够装下的最大价值

    代码:一维的写法,dp数组代表的是当前状态能够放下的最大价值

    for(int i=0;i<n;i++)
    {
        for(int j=m;j>=w[i];j--)
              dp[j]=max(dp[j],dp[j-w[i]]+v[i]);   
        // 对于第i件物品,可以放或不放。不放:dp[j]=dp[j]:放:j-w[i]确保有足够的空间,dp[j]=dp[j-w[i]]+v[i]
    }
    

    完全背包

    概念:给定n种物品的价值和重量,每种物品可以取多次。求出当背包容量为m时能够装下的最大价值

    代码:一维的写法

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

    注意:

    01背包和完全背包的一维写法的区别在于for循环的第二层循环的遍历顺序

    01背包:从m开始--、完全背包:从w[i]开始++

    多重背包

    概念:给定n种物品的价值和重量,每种物品最多可以取k次。求出当背包容量为m时能够装下的最大价值

    代码:

    for(int i=0;i<n;i++) //大米种类
    {
        for(int j=0;j<daishu[i];j++)//每种大米的袋数
        {
            for(int k=m;k>=p[i];k--)//从总金额开始
                dp[k]=max(dp[k],dp[k-p[i]]+w[i]);
        }
    }
    
  • 相关阅读:
    vmware虚拟机 安装
    js中设置元素class的三种方法小结
    HTML可编辑的select
    视图和表的区别和联系
    数据库之常用函数
    数据库之Group By用法
    数据库之存储过程
    数据库内外连接讲解
    ExtJs知识点概述
    SpringMVC 400 Bad Request 问题
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11976780.html
Copyright © 2011-2022 走看看