代码随想录算法训练营第三十五天| 01背包问题 二维 、01背包问题 一维、416. 分割等和子集 。c++转java

news2024/11/20 10:46:59

背包理论基础

视频地址: 带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili

01背包问题 二维

题目我是在Acwing上面做的,思路可以参照上面理论基础说的01背包,题目如下:

AC代码如下:

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int v = scanner.nextInt();
        int[] value = new int[n];
        int[] weight = new int[n];
        for(int i = 0;i < n;i++){
            weight[i] = scanner.nextInt();
            value[i] = scanner.nextInt();
        }
        
        int[][] dp = new int[n][v + 1];
        
        for(int i = weight[0];i <= v;i++) dp[0][i] = value[0];
        for(int i = 1;i < n;i++){
            for(int j = 1;j <= v;j++){
                // 处理一下背包放不下的情况
                if(weight[i] > j ){
                    dp[i][j] = dp[i - 1][j];
                    continue;
                }
                dp[i][j] = Math.max(dp[i - 1][j],dp[i - 1][j - weight[i]] + value[i]);
                
            }
        }
        
        System.out.print(dp[n - 1][v]);
    }
}

01背包问题 一维

题目跟上面的是一样的,看题解:代码随想录

转成一维之后,我比较困惑的点就是为什么要倒着遍历...

因为怕dp[v]之后就不会更新了,那岂不是就找不到最大的了,

手动模拟一遍发现还是自己多虑了,逆着是为了不会重复取到一个物品,因为dp[j]已经保存了i - 1的最大值,所以只要考虑要不要加元素,后面的思路跟二维的这个是一样的。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int v = scanner.nextInt();
        int[] value = new int[n];
        int[] weight = new int[n];
        for(int i = 0;i < n;i++){
            weight[i] = scanner.nextInt();
            value[i] = scanner.nextInt();
        }
        
        int[] dp = new int[v + 1];
        
        // for(int i = weight[0];i <= v;i++) dp[0][i] = value[0];
        for(int i = 0;i < n;i++){
            for(int j = v;j >= weight[i];j--){
                // 处理一下背包放不下的情况
                // if(weight[i] > j ){
                //     dp[i][j] = dp[i - 1][j];
                //     continue;
                // }
                dp[j] = Math.max(dp[j],dp[j - weight[i]] + value[i]);
                
            }
        }
        
        System.out.print(dp[v]);
    }
}

416. 分割等和子集

思路:先判断和是否为偶数,如果不是就返回false,剩下的部分用回溯做,只需要找到一组数等于sum/2就可以了,但是,超时了┭┮﹏┭┮,背包的确实没思路~,看题解:代码随想录

分析了一下,想不到用背包,主要是因为背包一般都是用来求最大值的,比如给定体积,求能装的价值最大,而这里是要判断是否可以找到一组数的和等于target。

但是这个问题也可以转换一下,就很🐂,转化的思路最关键的一点就是:对于容量为target的背包,我们要找这么一组数的和为target,其实也就是在求容量为target的包能装的最大价值,因为这里value = weight,所以dp[target]的最大值也就是target。

class Solution {
    public boolean canPartition(int[] nums) {
        int sum = 0;
        for(int i = 0;i < nums.length;i++)
            sum += nums[i];
        
        if(sum % 2 == 1)
            return false;
        // 
        int target = sum / 2;
        int[] dp = new int[target + 1];
        for(int i = 0;i < nums.length;i++){
            for(int j = target;j >= nums[i];j--){
                dp[j] = Math.max(dp[j],dp[j - nums[i]] + nums[i]);
            }
            if(dp[target] == target)
                return true;
        }
        return dp[target] == target;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊云科技宣布新推出Elasticahe for Redis的 Valkey缓存

Amazon ElastiCache 宣布支持 Valkey&#xff0c;与其他支持的引擎相比&#xff0c;无服务器的价格低 33%&#xff0c;基于节点的价格低 20%。使用 ElastiCache Serverless for Valkey&#xff0c;客户可以在一分钟内创建缓存&#xff0c;并且起步价低至每月 6 USD。Valkey 是由…

SpringBoot3.x.x整合Ehcache3 实例(入门踩坑教程)

近期尝试了一下 SpringBoot 3.3.5 JDK17 Ehcache3.10.8整合 注意&#xff0c;这个版本的boot&#xff0c;提出了公用的缓存模板&#xff0c;Spring官网有相关介绍&#xff0c;整合ehcache需要使用jcache。 老版本的3.0版本以下整合&#xff0c;我这里就不参与了&#xff0c;可以…

跨平台WPF框架Avalonia教程 十六

SelectableTextBlock 可选文本块 SelectableTextBlock 块是一个用于显示文本的标签&#xff0c;允许选择和复制文本。它可以显示多行&#xff0c;并且可以完全控制所使用的字体。 有用的属性​ 您可能最常使用这些属性&#xff1a; 属性描述SelectionStart当前选择的起始字…

每日一练:【优先算法】双指针之移动零(easy)

双指针概念介绍 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。 对撞指针&#xff1a;一般用于顺序结构中&#xff0c;也称左右指针。 • 对撞指针从两端向中间移动。一个指针从最左端开始&#xff0c;另一个从最右端开始&#xff0c;然后逐渐…

ASP.NET Core Webapi 返回数据的三种方式

ASP.NET Core为Web API控制器方法返回类型提供了如下几个选择&#xff1a; Specific type IActionResult ActionResult<T> 1. 返回指定类型&#xff08;Specific type&#xff09; 最简单的API会返回原生的或者复杂的数据类型&#xff08;比如&#xff0c;string 或者…

【JAVA】使用mybatis plus查询数据库中的geometry字段为null

目录 问题描述&#xff1a; 原码&#xff1a; 实体类&#xff1a; 接口&#xff1a; 解决方法&#xff1a; 1、创建Handle 2、配置handle让mybatis-plus能够识别 相关代码&#xff1a; 问题描述&#xff1a; 在 MyBatis Plus 中&#xff0c;查询的 geometry 字段在数据库…

51c自动驾驶~合集28

我自己的原文哦~ https://blog.51cto.com/whaosoft/12030824 #自动驾驶建图的统一矢量先验地图编码 高德地图&西交 | 先验驾驶 论文链接&#xff1a;https://arxiv.org/pdf/2409.05352 写在前面&笔者的个人理解 最近出现了很多先验地图的论文&#xff0c;高德地图…

【全面解读】Apache SeaTunnel常见问题全攻略

使用SeaTunnel需要安装Spark或者Flink这样的引擎么&#xff1f; 不需要&#xff0c;SeaTunnel 支持 Zeta、Spark 和 Flink 作为同步引擎的选择&#xff0c;您可以选择之一就行&#xff0c;社区尤其推荐使用 Zeta 这种专为同步场景打造的新一代超高性能同步引擎。Zeta 被社区用…

Spring Boot3.x自动配置不生效的排查与解决:IDEA 文件夹命名导致的问题

在使用Spring Boot搭建多模块项目时&#xff0c;需要使用到自动配置功能&#xff0c;把一些通用功能封装成模块后通过 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件注册配置类。然而&#xff0c;最近遇到一个奇怪的问题&#xff1a…

JavaSE(十四)——文件操作和IO

文章目录 文件操作和IO文件相关概念Java操作文件文件系统操作文件内容操作字节流FileOutputStreamFileInputStream代码演示 字符流FileWriterFileReader代码演示 缓冲流转换流 案例练习 文件操作和IO 文件相关概念 文件 通常指的是包含用户数据的文件&#xff0c;如文本文件、…

Qt桌面应用开发 第五天(常用控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…

Vue.js 插槽 Slots 实际应用 最近重构项目的时候遇到的...

前端开发中 插槽 Slots 是一个重要的概念 我们可以查看一下vue.js的官方文档 https://cn.vuejs.org/guide/components/slots 类似于连接通道一样 可以把核心代码逻辑搬到另外的地方 做一个引用 而原先的地方可能并不能这样书写 对于这个概念我在vue的官方文档里面找到了…

ubuntu pytorch容器内安装gpu版本的ffmpeg

一、基础镜像和生成容器 pytorch/pytorch &#xff1a;1.13.1-cuda11.6-cudnn8-devel 生成容器&#xff0c;一定要加NVIDIA_DRIVER_CAPABILITIEScompute,utility,video,graphics&#xff0c;否则侯建无法推流&#xff0c;报错缺少编码之类的。 docker run -it --gpus all -e …

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(2)第一个工程 LED心跳灯

VSCodeESP-IDF开发ESP32-S3-DevKitC-1&#xff08;2&#xff09;第一个工程 LED心跳灯 前言1.新建工程2.编写控制LED代码3.LED控制独立成.c和.h文件 前言 实际开发中很多时候我们需要有一个类似心跳灯或运行指示灯的灯以不同的状态闪烁以表示程序的运行状态&#xff0c;所以第…

在ubunto18.04安装node 14.16.0

这里演示安装node 14.16.0&#xff0c;其他版本也一样的安装步骤&#xff0c;需要注意1 1.检查本机服务器类型&#xff0c;有的是x64&#xff0c;有的是ARM&#xff0c;先查清楚是什么类型再进行下载&#xff0c;否则会存在编译出错的问题 bash: /opt/node-v14.16.0-linux-x6…

基于YOLOv8深度学习的智慧农业猪行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧农业的快速发展&#xff0c;畜牧业的智能化管理已逐渐成为提高生产效率、提升动物福利、降低运营成本的关键手段之一。在此背景下&#xff0c;畜牧场对动物行为的自动化监测需求日益增长&#xff0c;尤其是在大型养猪场&#xff0c;猪群的日常行为检测对于疾病预防、饲…

独立资源池与共享资源池在云计算中各自的优势

在云计算领域&#xff0c;独立资源池和共享资源池是两种关键的资源管理策略&#xff0c;它们各自具有独特的优势&#xff0c;以适应不同的业务需求和场景。 独立资源池的优势 资源独占性&#xff1a;独立资源池为特定应用或用户提供专属的资源&#xff0c;这意味着资源不会被其…

异或和之和

//暴力做法 枚举每个子区间 O(n^3) //优化1 利用前缀异或和快速求出区间异或和 O(n^2) //优化2 处理位运算的常用方法&#xff1a;拆位法 常用的思想&#xff1a;贡献法思想 下面详见优化2&#xff1a; 1.拆位贡献法 2.实战真题1 题目链接&#xff1a;1.异或和之和 - 蓝桥…

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段&#xff1a; AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…

第8章硬件维护-8.2 可维护性和可靠性验收

8.2 可维护性和可靠性验收 可维护性和可靠性验收非常重要&#xff0c;硬件维护工程师在后端发现问题后&#xff0c;总结成可维护性和可靠性需求&#xff0c;在产品立项的时候与新特性一起进行需求分析&#xff0c;然后经过设计、开发和测试环节&#xff0c;在产品中落地。这些需…