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

    类型: 有一个背包,容量为w,给你几种物品的体积和价值,问怎么放才能使背包总价值最高

    数据:包包体积5      

    3件物品 价值 3  5  4

        体积 2  4  1

    上面的数字0-5代表背包容量为0-5时的情况

    dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i])

    讲真这个问题是dp的话

    那么子问题是什么? 

    ----------------------------------

    我今天突然觉得原问题是:k件物品,装进背包的总价值

    子问题:k-1件物品装进背包的总价值  

    这样解释的话应该就不难理解 f[i][j]  =  f[i-1][j-w[i]] + v[i]了

    这不就是第i件物品加不加如的问题吗  

    加进去的话就更新,不加就不更新

    ----------------------------------

    dp[ i ][ j ] 表示 在总共考虑前i件物品,且背包容量为j时所能获得的最大价值

    dp[i][j]的j不是说剩余容量,而是总容量

            for(i = 1; i <= n; ++i)
            {
                for(j = 0; j <= v; ++j)
                {
                    dp[i][j] = dp[i-1][j];
                    if(vol[i] <= j)
                        dp[i][j] = max(dp[i][j],dp[i-1][j-vol[i]] + value[i]);
                }
            }
    

     

  • 相关阅读:
    layDate 只显示 小时&分钟
    获取从今天以后一周的日期列表
    Laravel_$rules参数规则
    Layui——分步表单
    XML命名空间详解
    centos7搭建svn服务器
    jvm原理
    动态代理与反射
    java之JUC
    实现从数据库加载数据并返回easyui-tree所需要数据
  • 原文地址:https://www.cnblogs.com/mltang/p/8711332.html
Copyright © 2011-2022 走看看