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]);
                }
            }
    

     

  • 相关阅读:
    python操作MySQL数据库
    用python监控您的window服务
    关于position定位中的几个注意点
    filter 滤镜
    git使用心得
    :after,:before,content
    outline和border
    《css揭秘》之背景与边框
    css权威指南学习笔记--第6章
    浅谈setTimeout和setInterval
  • 原文地址:https://www.cnblogs.com/mltang/p/8711332.html
Copyright © 2011-2022 走看看