首页 > 其他分享 >背包问题

背包问题

时间:2022-08-15 07:44:36浏览次数:49  
标签:util 背包 java int 问题 mem total public

package pack;

import java.util.Arrays;

public class KnapSack {
    public static int getMax01(int[] b, int[] w, int total){
        int[][] mem = new int[b.length+1][total+1];
        for(int i=1;i<=b.length;i++){
            for(int j=1;j<=total;j++){
                mem[i][j] = mem[i-1][j];
                if(w[i-1]<=j) mem[i][j] = Math.max(mem[i][j], mem[i-1][j-w[i-1]]+b[i-1]);
            }
        }
        return mem[b.length][total];
    }
    public static int getMax01Optimize(int[] b, int[] w, int total){
        int[] mem = new int[total+1];
        for(int i=1;i<=b.length;i++){
            for(int j=total;j>=1;j--){
                mem[j] = mem[j];
                if(w[i-1]<=j)
                    mem[j] = Math.max(mem[j], mem[j-w[i-1]]+b[i-1]);
            }
            System.out.println(Arrays.toString(mem));
        }
        return mem[total];
    }public static void main(String[] args) {
//        System.out.println(getMax(new int[]{1,2,4,2,5},new int[]{1,2,3,2,5},10));
        System.out.println(getMax01Optimize(new int[]{1,2,4,2,5},new int[]{1,2,3,2,5},10));
        System.out.println(getMaxAllPackOptimize(new int[]{1,2,4,2,5},new int[]{1,2,3,2,5},10));
    }
}

 

 

package pack;

import java.util.Arrays;

public class KnapSack {

    public static int getMaxAllPack(int[] b, int[] w, int total){
        int[][] mem = new int[b.length+1][total+1];
        for(int i=1;i<=b.length;i++){
            for(int j=1;j<=total;j++){
                mem[i][j] = mem[i-1][j];
                if(w[i-1]<=j) mem[i][j] = Math.max(mem[i][j], mem[i][j-w[i-1]]+b[i-1]);
            }
        }
        return mem[b.length][total];
    }

    public static int getMaxAllPackOptimize(int[] b, int[] w, int total){
        int[] mem = new int[total+1];
        for(int i=1;i<=b.length;i++){
            for(int j=1;j<=total;j++){
                if(w[i-1]<=j) mem[j] = Math.max(mem[j], mem[j-w[i-1]]+b[i-1]);
            }
        }
        return mem[total];
    }

    public static void main(String[] args) {
        System.out.println(getMaxAllPackOptimize(new int[]{1,2,4,2,5},new int[]{1,2,3,2,5},10));
    }
}

 

标签:util,背包,java,int,问题,mem,total,public
From: https://www.cnblogs.com/cynrjy/p/16586948.html

相关文章

  • NC15447 wyh的问题
    题目链接题目题目描述我国现在能源消耗非常严重,现在政府有这样一个工作,每天早上都需要把一些路灯关掉,但是他们想让在关闭的过程中所消耗的能源是最少的,负责路灯关闭的工......
  • 麻了,代码改成多线程,竟有9大问题
    前言很多时候,我们为了提升接口的性能,会把之前单线程同步执行的代码,改成多线程异步执行。比如:查询用户信息接口,需要返回用户基本信息、积分信息、成长值信息,而用户、积分......
  • 9.最长公共子序列问题(动态规划)
    题目描述:给定两个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。输入格式:输入数据有多组,每组有两行,每行为一个长度不超过500的字符串(输入全是大......
  • 6.最少硬币问题(动态规划)
    题目描述:设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。对任意钱数0≤m≤2000......
  • centos7安装kettle 资源库问题的解决方案
    wgetftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/RHEL_7/x86_64/webkitgtk-2.4.9-1.el7.x86_64.rpmyumin......
  • [2000年NOIP普及组] 税收与补贴问题
    [2000年NOIP普及组]税收与补贴问题分析:根据题意,在销量随售价改变的基础上求最小的补贴或税收,本题用了打表的方式来展现售价与销量之间的关系,其中出现了几个与普遍的规律......
  • [2001年NOIP普及组] 最大公约数和最小公倍数问题
     [2001年NOIP普及组]最大公约数和最小公倍数问题思路:可以运用暴力枚举法。先用两个数的乘积=他们的最大公约数*最小公倍数的公式求出乘积num,再在已知范围内暴力搜素能......
  • 【问题解决】解决使用aliyuncdn加速的域名证书不同步问题
    今天登录上博客发现好家伙资源链全挂了,进去一看发现是证书到期了,但是我回服务器查看证书发现证书已经更新而且是有效状态,清缓存一类的都尝试过了,依旧不行,然后网上找到了一......
  • [2000年NOIP普及组] 税收与补贴问题
    [2000年NOIP普及组]税收与补贴问题思路:先开一个二维数组,将商品在各个价位的销售量以表格的方式记录下来,再加上补贴或税收,得出最大利润与期望的比较,最后输出代码如下:#in......
  • [2000年NOIP普及组] 税收与补贴问题
     价格枚举范围,只要销量不为0就一直枚举。因销量有两个区间,故枚举时要注意。该题要注意,最小值在绝对值中产生,要注意输出结果有正有负。    ......