美文网首页
01背包问题

01背包问题

作者: fuel | 来源:发表于2016-08-15 13:46 被阅读0次

令V(i,j)表示在前i(1<=i<=n)个物品中能够装入容量为就j(1<=j<=C)的背包中的物品的最大价值,则可以得到如下的动态规划函数:
(1) V(i,0)=V(0,j)=0
(2) V(i,j)=V(i-1,j) j<wi
V(i,j)=max{V(i-1,j) ,V(i-1,j-wi)+vi) } j>wi
代码实现:

/**
 *@param val[] 物品价值数组
 *@param wt[]  物品重量数组 
 *@param W     背包的重量 
 */

 public static int knapsack(int val[], int wt[], int W) {

        int N = wt.length; 

        int[][] V = new int[N + 1][W + 1]; 

        for (int col = 0; col <= W; col++) {
            V[0][col] = 0;
        }
 
        for (int row = 0; row <= N; row++) {
            V[row][0] = 0;
        }
 
        for (int item=1;item<=N;item++){
            for (int weight=1;weight<=W;weight++){
                if (wt[item-1]<=weight){
                    V[item][weight]=Math.max (val[item-1]+V[item-1][weight-wt[item-1]], V[item-1][weight]);
                }
                else {
                    V[item][weight]=V[item-1][weight];
                }
            }
 
        }

        for (int[] rows : V) {
            for (int col : rows) {
                System.out.format("%5d", col);
            }
            System.out.println();
        }
 
        return V[N][W];
    }

相关文章

  • 动态规划-背包问题

    01背包问题 详解:01背包问题详解链接

  • 背包问题1(01背包)

    N件物品,没见有重量Wi,价值Vi;选其中几件放入容量为M的背包中,求价值的最值。——经典背包问题背包问题分三类:...

  • 01背包问题

    动态规划算法一般用来求解最优化问题,当问题有很多可行解,而题目要求寻找这些解当中的“最大值”/“最小值”时,通常可...

  • 01背包问题

    题目描述:给定 n 个物品和一个容量为 W 的背包,物品 i 的重量是 wi,其价值为 vi 。应该如何选择装入背...

  • 01背包问题

    有n个重量和价值分别为wi,vi的物品。从这些物体中挑选出总重量不超过W的物品,求所有方案中价值总和的最大值。 1...

  • 01背包问题

    A - Bone Collector Many years ago , in Teddy’s hometown t...

  • 01背包问题

    令V(i,j)表示在前i(1<=i<=n)个物品中能够装入容量为就j(1<=j<=C)的背包中的物品的最大价值,则...

  • 01背包问题

    题目:有A(2kg,6$);B(2kg,3$);C(6kg,5$);D(5kg,4$);E(4kg,6$)五种物品...

  • 01背包问题

    题目: 有限个数的货物,具有不同的体积还有价值,怎么让其放进有限体积的背包并价值最大。 货物只有两种可能,放进去/...

  • 背包01问题

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

网友评论

      本文标题:01背包问题

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