美文网首页
背包问题算法探究

背包问题算法探究

作者: 墨源为水 | 来源:发表于2017-03-10 11:51 被阅读83次

有N个物品,其价值为数组W[],重量为数组P[],包的承重量为M,问包能承重的最大价值?

一、设F[i,j]为前i个物品放入承重为j的包的最大价值,那必然:

F[i,j] = Max{F[i-1,j],F[i-1,j-P[i]]+W[i]}

可能你会对此公式会有些疑问,为什么会得到此公式,那我们来讲解一下公式,前i个物品放入承重为j的包的最大价值只会存在两种情况:
(1)当不带第i件商品时,那么其最大价值为F[i-1,j]
(2)当带i件商品时,那么前i-1件商品放在剩余重量j-P[i]的最大价值,在加上第i件本身价值,为F[i-1,j-P[i]]+W[i]

二、如何将公式转化为可执行的代码
以下描述的是5个物品,其重量为{2,2,6,5,4},价值为{6,3,5,4,6},承重为10的包的问题

beibao.png
eg:d9的单元格的值是:F[4,9] = Max{F[3,9],F[3,9-5]+4} = Max{c9,c4 + 4} = Max{10,10} = 10
c10单元格的值是:F[3,10] = Max{F[2,10],F[2,10-6]+5} = Max{11,11} = 11
//C为包的承重,N为背包个数,w为物品重量,v为物品价值
    int maxinput(int C,int N ,int w[],int v[])  
    {  
        int[] V = new int[C+1];
        int i,j;   
        for(j=0;j<=C;j++)  
        {  V[j]=0;  
        }  
        for(i=0;i<N;i++)  
        {  
            for(j=C;j>=w[i];j--)  
            {  
                V[j]=max(V[j],V[j-w[i]]+v[i]);  
            }  
        }  
        return(V[C]);  
    }

相关文章

  • 背包问题算法探究

    有N个物品,其价值为数组W[],重量为数组P[],包的承重量为M,问包能承重的最大价值? 一、设F[i,j]为前i...

  • 算法—背包问题

    什么是背包问题:给出一系列矩阵,各自有值和容量,目标是找出总值最大的集合。这个问题的限制是,总容量必须小于等于”背...

  • 2019-07-10 数据结构和算法(妙味杜鹏)

    八皇后 A *寻路 背包问题(动态规划方法) 背包问题(贪心算法)

  • 14《算法入门教程》贪心算法之背包问题

    1. 前言 本节内容是贪心算法系列之一:背包问题,主要讲解了什么是背包问题,如何利用贪心算法解决背包问题,给出了背...

  • 【算法】01背包问题

    一、问题 描述 给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi。 问:应该如何...

  • 算法之背包问题

    背包问题(Knapsack problem) 背包问题是一种组合优化问题,为NP-C Problem 描述 给定一...

  • 算法Balabala背包问题

    前言 前文用较多篇幅介绍了动态规划算法的套路,以后的文章可能就不用这么多篇幅描述详细的思考过程。 现在再来解决一个...

  • 编程

    今天用0-1算法,编写了背包问题!

  • 背包01问题

    背包01问题 背包01问题是一个经典的算法。 问题是这样描述的:一个背包最大容量为9kg,现在有5个物品,每个物品...

  • 回溯算法解决背包问题

    1.描述:石头收藏家小明在徒步登山的时候发现了一堆美丽的石头。这些石头价值不菲,但是都很重,小明自身的力气有限,一...

网友评论

      本文标题:背包问题算法探究

      本文链接:https://www.haomeiwen.com/subject/dcdwgttx.html