首页 > 其他分享 >背包问题 0-1背包 完全背包

背包问题 0-1背包 完全背包

时间:2024-03-29 14:15:24浏览次数:13  
标签:背包 weight int 完全 问题 sc new dp

区分
统一背包问题都先遍历物品(物品重量)再遍历背包(背包大小) 0-1背包问题遍历背包时逆序, 完全背包问题遍历背包时正序 求最大价值,dp初始值就小点(一般0就行),求最小价值,dp初始值就大点(找个数 Interger最大值或者背包大小+1W这种)

0-1背包是 一个背包里每个物品最多能放一次
完全背包是 一个背包里每个物品可以放多次
0-1背包
https://kamacoder.com/problempage.php?pid=1046

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int N = sc.nextInt();
        int[] weight = new int[M];
        int[] value = new int[M];
        for (int i = 0; i < M; i++) {
            weight[i] = sc.nextInt();
        }
        for (int i = 0; i < M; i++) {
            value[i] = sc.nextInt();
        }
        int[] dp = new int[N+1];
        //且初始化全是0
        for (int i = 0; i < M; i++) {
            for (int j = N; j >= weight[i] ; j--) {
                dp[j] = Math.max(dp[j],dp[j - weight[i]] + value[i]);
            }
        }
        System.out.println(dp[N]);
    }

总结: dp[j]的含义是 用i以及i以前的物品去放的最大价值 j >= weight[i]说明j容量能放下i物品,那就判断不放i的时候和拿出来一个i的空去放i的时候哪个价值更高。 0-1背包遍历背包时逆序
完全背包
https://kamacoder.com/problempage.php?pid=1052

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int V = sc.nextInt();
        int[] weight = new int[N];
        int[] value = new int[N];
        for (int i = 0; i < N; i++) {
            weight[i] = sc.nextInt();
            value[i] = sc.nextInt();
        }
        //初始值dp都为0  求最大价值,每一步用max,初始为小点
        int[] dp = new int[V+1];
        for (int i = 0; i < N; i++) {
            for (int j = weight[i]; j <= V ; j++) {
                dp[j] = Math.max(dp[j],dp[j - weight[i]] + value[i]);
            }
        }
        System.out.println(dp[V]);
    }

总结: 完全背包问题,dp[j]代表用i物品以及i之前的物品去放的最大价值,,完全背包,所以遍历背包时正序。

标签:背包,weight,int,完全,问题,sc,new,dp
From: https://www.cnblogs.com/jeasonGo/p/18103730

相关文章

  • resultMap映射null问题
    resultMap和resultTypeResultMap会将所有的自定义映射返回,实体类里不包含的字段也映射出来,且为nullresultMap存在的问题,你使用自定义映射集映射结果后,mapper返回的结果类型就成了自定义映射集的type当需要的结果只需要几个字段时,而返回类型建议使用ResultType,因为ResultMap映射......
  • [转帖]软件出口管制中的相关法律问题和分析
    https://www.sohu.com/a/294379160_221481 作者|方春晖刘良勇宋献涛 北京德和衡律师事务所(本文系知产力获得独家首发的稿件,转载须征得作者本人同意,并在显要位置注明文章来源。)(本文8010字,阅读约需16分钟)序言在国际贸易争端进程中,出口管制合规方面的话题不断浮现出来......
  • 动态规划 选择dp:多重背包+多重背包puls----中专生刷算法
    不了解动态规划和选择dp的同学先看一下这两篇文章动态规划:选择dp及优化01背包问题-CSDN博客动态规划:完全背包问题----中专生刷算法-CSDN博客然后我们来做题普通题+进阶题,图文详解,化零为整的解决多重背包puls问题!!!多重背包输入格式输出格式输出一个整数,表示最......
  • H5get请求重定向后页面没有跳转重定向的地址是什么问题;H5get请求重定向后页面不跳转自
    Ajax请求的处理:如果使用了XMLHttpRequest或FetchAPI进行GET请求,并通过异步处理来获取响应数据,那么浏览器不会自动跳转到重定向的地址。如果在H5的GET请求中,服务器返回了重定向响应(HTTP状态码为3xx),但页面没有跳转到重定向的地址,可能有几种可能的原因:JavaScript......
  • Avalonia 运行在Ubuntu20.04上,记录发布到运行的过程,已解决默认字体问题
    目录1.安装.NET8.0环境2.发布Avalonia程序3.默认字体问题解决Demo程序下载(开箱即用):https://download.csdn.net/download/rotion135/890489371.安装.NET8.0环境下载微软dotnet安装脚本:sudowgethttps://dot.net/v1/dotnet-install.sh-Odotnet-install.sh运行......
  • H5项目设置接口报错预警警报,需记录什么信息能有效排查报错问题
    在H5项目中,如果要有效地排查接口报错问题,记录以下信息可能会有所帮助:错误信息:记录报错信息的具体内容,包括错误代码、错误描述等。这将是你开始排查问题的关键信息。接口地址:记录发生错误的接口地址,包括请求的URL、接口路径等。这有助于定位问题所在的具体接口。请求......
  • 启动应用程序出现FirewallAPI.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个FirewallAPI.dll文件(挑选合适的版本文件)把......
  • 启动应用程序出现fthsvc.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fthsvc.dll文件(挑选合适的版本文件)把它放......
  • 启动应用程序出现fontext.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fontext.dll文件(挑选合适的版本文件)把它放......
  • LeetCodeHot100 动态规划 70. 爬楼梯 118. 杨辉三角 198. 打家劫舍 279. 完全平方
    70.爬楼梯https://leetcode.cn/problems/climbing-stairs/description/?envType=study-plan-v2&envId=top-100-likedpublicintclimbStairs(intn){if(n<=1)returnn;int[]dp=newint[n+1];dp[1]=1;dp[2]=2;......