zoukankan      html  css  js  c++  java
  • 动态规划---01背包问题

    有n个物品,每个物品的重量放在数组weight[]中,每个物品对应的价值放在数组value[]中

    有一个背包,容量为target,往背包里装上述n个物品,背包能容纳的最大价值

    思路:对于每一个物品,要么装入背包,要么不装入背包

       对于第i个物品,如果它的重量weight[i-1]小于等于背包的容量,它才有可能被装入,如果weight[i-1]大于等于背包的容量,不可能被装入

          创建一个二维数组int[][] m = new int[n+1][target+1];,m[i][j]表示,对于第i个物品,当背包容量为j时,获得的最大价值

    public static int ZeroOnePackage2(int []value, int[] weight, int target){
            int max = 0;
            if(value!=null && value.length>0 && weight!=null && weight.length>0 && weight.length == value.length && target>0){
                int n = value.length;
                int[][] m = new int[n+1][target+1];
                for(int i=1;i<=n;i++){
                    for(int j=1;j<=target;j++){
                        if(weight[i-1] > j){
                            m[i][j] = m[i-1][j];
                        }else{
                            m[i][j] = Math.max(m[i-1][j], m[i-1][j-weight[i-1]]+value[i-1]);
                        }
                        if(max>m[i][j]){
                            max = m[i][j];
                        }
                    }
                }
                for(int i=0;i<m.length;i++){
                    for(int j=0;j<m[i].length;j++){
                        System.out.print(m[i][j]+" ");
                    }
                    System.out.println();
                }
            }
            
            return max;
            
        }
  • 相关阅读:
    用户与组
    初识linux
    权限管理
    认识vim 编辑器
    文件归档
    路由相关术语
    Access、Hybrid和Trunk
    #error作用
    交换芯片收发包的 DMA 实现原理
    linux网络学习
  • 原文地址:https://www.cnblogs.com/duanjiapingjy/p/9688298.html
Copyright © 2011-2022 走看看