代码随想录第41天|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

文章目录

  • 背包问题
  • 背包题目
    • 解法一 ● 01背包问题-二维数组
    • 五部曲
      • 1.确定dp数组
      • 2、确定递推公式
      • 3、初始化dp数组
      • 4、循环
      • 代码:
    • 解法二-01背包问题-滚动数组
      • 五部曲1:定义dp
      • 二、递推公式
      • 三、初始化
      • 四、循环顺序
      • 代码:
  • 698. 划分为k个相等的子集
    • 题解:
    • 代码:
  • ● 416. 分割等和子集
    • 思路:-自己没思路
      • 动归五部曲-1.确定dp数组以及下标的含义
      • 2.递推公式
      • 3. dp数组如何初始化
      • 4.确定遍历顺序
      • 5. dp数组
    • 代码:

背包问题

在这里插入图片描述

背包题目

在这里插入图片描述

解法一 ● 01背包问题-二维数组

五部曲

1.确定dp数组

在这里插入图片描述

2、确定递推公式

在这里插入图片描述

3、初始化dp数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、循环

在这里插入图片描述

在这里插入图片描述

代码:

import java.util.*;
public class Main{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];for(int i=0;i<m;i++){weight[i]=sc.nextInt();}int[] values=new int[m];for(int i=0;i<m;i++){values[i]=sc.nextInt();}int[][] dp=new int[m][n+1];for(int j=weight[0];j<=n;j++){dp[0][j]=values[0];//其他初始化为0}//先物品再体积for(int i=1;i<m;i++){for(int j=1;j<=n;j++){if(j<weight[i]){dp[i][j]=dp[i-1][j];}else{dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-weight[i]]+values[i]);}}}System.out.println(dp[m-1][n]);}
}

解法二-01背包问题-滚动数组

在这里插入图片描述

五部曲1:定义dp

在这里插入图片描述

二、递推公式

在这里插入图片描述

三、初始化

在这里插入图片描述

四、循环顺序

看完了提个小建议,解释倒序遍历那一部分用一句话解释可能更好,比如“列表后面的值需要通过与前面的值比较确定,因此要先处理”。举了个例子反倒会让观众的关注点从逻辑本身转移到数字和具体的计算上
在这里插入图片描述
在这里插入图片描述

代码:

import java.util.*;
public class Main{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];for(int i=0;i<m;i++){weight[i]=sc.nextInt();}int[] values=new int[m];for(int i=0;i<m;i++){values[i]=sc.nextInt();}int[] dp=new int[n+1];// for(int j=weight[0];j<=n;j++){//i=0在这里初始化//     dp[0][j]=values[0];//其他初始化为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]]+values[i]);}}System.out.println(dp[n]);}
}

698. 划分为k个相等的子集

在这里插入图片描述

题解:

力扣题解

代码:

class Solution {public static int[] numUsed;public boolean canPartitionKSubsets(int[] nums, int k) {numUsed = new int[nums.length];Arrays.sort(nums);//排列// int sum = Arrays.stream(nums).sum();int sum=0;for(int i:nums){sum+=i;}//1.不能整分 2.最大的数大于均分的数值 ->都返回falseif (sum % k != 0 || nums[nums.length - 1] > sum / k) return false;return divideGroups(nums, nums.length - 1, sum / k, 0, k);//从后向前找}public boolean divideGroups(int[] nums, int start, int target, int current, int k) {   if (k == 1) return true; // 分组操作执行k-1次之后,最后剩余的元素,就是最后一组了,不需要再匹配       // 分组操作执行k-1次后,最后剩余的元素,就是最后一组了,不需要再匹配    if (current == target) return divideGroups(nums, nums.length - 1, target, 0, k - 1);   for (int i = start; i >= 0; i--) {if (numUsed[i] == 1 || current + nums[i] > target) continue; // 被使用的元素,不能再次使用;总和大于目标值,也不能使用numUsed[i] = 1; // 标记占用if (divideGroups(nums, i - 1, target, current + nums[i], k)) return true;numUsed[i] = 0; // 撤销标记// 去重while (i > 0 && nums[i - 1] == nums[i]) i--; // 例如“12333333...”,假如最右侧的“3”这个值没有匹配上,那么它左侧的剩余五个“3”都不需要再匹配了。}return false;}
}

● 416. 分割等和子集

在这里插入图片描述

思路:-自己没思路

在这里插入图片描述

动归五部曲-1.确定dp数组以及下标的含义

在这里插入图片描述

2.递推公式

  • dp[j]=Math.max(dp[j],dp[j-weight[i]]+values[i]) → dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);

3. dp数组如何初始化

都为0

4.确定遍历顺序

物品正序 重量逆序

5. dp数组

在这里插入图片描述

代码:

class Solution {public boolean canPartition(int[] nums) {int sum=0;for(int i:nums){sum+=i;}if(sum%2!=0)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.mzph.cn/news/702507.shtml

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

相关文章

【AI学习指南】一、人工智能方向学习路线

目录 人工智能是什么 我们可以利用人工智能做什么 人工智能学习路线 总结与展望

FairyGUI × Cocos Creator 3.x 使用方式

前言 上一篇文章 FariyGUI Cocos Creator 入门 简单介绍了FairyGUI&#xff0c;并且按照官方demo成功在Cocos Creator2.4.0上运行起来了。 当我今天使用Creator 3.x 再引入2.x的Lib时&#xff0c;发现出现了报错。 这篇文章将介绍如何在Creator 3.x上使用fgui。 引入 首先&…

uniapp开发安卓app华为平板真机预览

首先使用数据线连接平板和电脑设备 一、前期准备 平板需要开启三个地方&#xff1a; 1、打开设置&#xff0c;在搜索框中输入版本号/或者直接点击最下方的【关于平板电脑】&#xff0c;点击版本号进入关于平板的界面&#xff0c;连续点击版本号7次&#xff0c;直到出现提醒“…

2.25基础会计学

资本公积是指由股东投入、但不能构成“股本”或“实收资本”的资金部分。 盈余公积是指公司按照规定从净利润中提取的各种积累资金。 所以区别在于盈余公积来自净利润。 借贷其实就是钱从哪来和到哪去的问题&#xff0c;来源是贷&#xff0c;流向是借。比如购入9w原材料&…

基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法. 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序 ........................…

facebook群控如何做?使用静态住宅ip代理有什么好处?

在进行Facebook群控时&#xff0c;ip地址的管理是非常重要的&#xff0c;因为Facebook通常会检测ip地址的使用情况&#xff0c;如果发现有异常的使用行为&#xff0c;比如从同一个ip地址频繁进行登录、发布内容或者在短时间内进行大量的活动等等&#xff0c;就会视为垃圾邮件或…

RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:分配和注册字符设备

🚀返回专栏总目录 文章目录 一、分配和注册字符设备二、file_operations沉淀、分享、成长,让自己和他人都能有所收获!😄 一、分配和注册字符设备 字符设备在内核中表示为struct cdev的实例。在编写字符设备驱动程序时,目标是最终创建并注册与struct file_operations关联…

Golang 中的字符串:常见错误和最佳实践

在这篇文章中&#xff0c;我们将讨论 Golang 中的字符串&#xff0c;并查看一些不同的场景&#xff0c;以避免常见错误。让我们深入探讨&#xff01; 1. 字符串是否可以为 nil&#xff1f; 我们已经对 Golang 中的字符串有了基本的了解&#xff0c;但我们可以从 Golang 字符串…

栈和队列笔试题

答案&#xff1a;&#xff08;1&#xff09;seqn[tail]data; tail(tail1)%SEQLEN; &#xff08;2&#xff09;data seqn[head]; head (head1)%SEQLEN; &#xff08;3&#xff09;head tail; &#xff08;4&#xff09;(tail1)%SEQLEN head; (5) while(head!tail) head (h…

JVM内存结构介绍

1.程序计数器&#xff08;Program Counter Register&#xff09; 程序计数器是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里&#xff08;仅是概念模型&#xff0c;各种虚拟机可能会通过一些更高效的方式去实现&…

电商评价分析:NLP信息抽取技术在用户评论中的应用与挖掘

一、引言 在2019年&#xff0c;电子商务的蓬勃发展不仅推动了消费市场的增长&#xff0c;也带来了海量的用户评价数据。这些数据&#xff0c;作为消费者对商品和服务直接反馈的载体&#xff0c;蕴含着巨大的价值。然而&#xff0c;由于其非结构化的特性&#xff0c;这些文本信息…

解决ssh:connect to host github.com port 22: Connection timed out与kex_exchange_identification

一、问题 无法进行clone项目和其他Git操作。执行检测连接命令 ssh -T gitgithub,com报错 ssh:connect to host github.com port 22: Connection timed out 即&#xff1a;连接22端口超时 涉及到的文件&#xff1a; C:\Users\JIACHENGER.ssh\config C:\Users\JIACHENGER.ssh\…

WPF 限制输入只能为英文

WPF 限制输入只能为英文 有时输入只能让用户输入英文&#xff0c;那么如何设置输入只能英文&#xff1f; 方法一&#xff1a;在Xaml页面中直接限制文本输入框输入 <Windowxmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http:…

Python实用技巧:输出列表(list)的倒序/逆序的几种方法

Python实用技巧&#xff1a;输出列表&#xff08;list&#xff09;的倒序/逆序的几种方法 &#x1f4c5;2024年02月25日 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质…

Linux修改shell工具连接端口

nano /etc/ssh/sshd_config 或者 vi /etc/ssh/sshd_config 或者 vim /etc/ssh/sshd_config

gin框架和gorm框架(不断更新......)

Gin怎么做参数校验 在 Gin 框架中&#xff0c;你可以使用 binding 和 validator 包来进行参数校验。 定义请求参数的结构体&#xff1a; type CreateUserRequest struct {Username string json:"username" binding:"required,alphanum,min4,max20"Email…

面试题整理1

文章目录 前言1.socket的过程2.谈谈你对数据库中索引的理解3.现在普通关系数据库用的数据结构是什么类型的数据结构4.索引的优点和缺点5.session、cookie和cache的区别是什么&#xff1f;6.如果有几千个session&#xff0c;怎么提高效率&#xff1f;7.session是存储在什么地方&…

港口人车防撞定位方案

大家好&#xff0c;我是北京华星智控公司小智&#xff0c;今天给大家介绍港口人员定位防撞安全管控方案。 首先说明项目建设背景、目的和面临的挑战&#xff0c;背景介绍&#xff1a; 港口作为货物运输和交换的重要节点&#xff0c;人员和机械设备频繁活动&#xff0c;存在碰撞…

pytorch -- 常见的transform包方法

1. 基础 PIL Image -> Image.open tensor -> ToTensor() [Convert a PIL Image or ndarray to tensor] ndarray -> cv2.imread 2. 常见方法 (1)ToTensor 将PIL/numpy ndarry转化为tensor from PIL import Image from torch.utils.tensorboard import SummaryWrite…

8.7 OpenGL纹理和采样器:压缩纹理图像

压缩纹理图像 Compressed Texture Images 纹理图像也可以使用已存储在已知压缩图像格式中的图像数据来指定或修改&#xff0c;这些格式包括附录D中定义的格式以及由扩展定义的任何额外格式。 void glCompressedTexImage1D( enum target, int level, enum internalformat, siz…