代码随想录第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,一经查实,立即删除!

相关文章

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关联…

栈和队列笔试题

答案&#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\…

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

港口人车防撞定位方案

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

统信UOS系统窗口特效设置

原文链接&#xff1a;统信UOS系统设置窗口特效 在今天的技术分享中&#xff0c;我们将探讨如何在统信UOS系统上充分利用窗口特效来美化和提升用户界面的交互体验。统信UOS作为一款注重视觉体验和用户友好性的操作系统&#xff0c;提供了丰富的窗口特效设置&#xff0c;让用户可…

详解 CSS 的背景属性

详解 CSS 的背景属性 背景颜色 语法&#xff1a; background-color: [指定颜色]; 注&#xff1a;默认是 transparent (透明) 的&#xff0c;可以通过设置颜色的方式修改 示例代码: 运行效果: 背景图片 语法&#xff1a;background-image: url(...); url 可以是绝对路径 也可…

小苯的IDE括号问题(CD) -----牛客小白月赛87(双链表)

C题&#xff1a;C-小苯的IDE括号问题&#xff08;easy&#xff09;_牛客小白月赛87 (nowcoder.com) D题&#xff1a; D-小苯的IDE括号问题&#xff08;hard&#xff09;_牛客小白月赛87 (nowcoder.com) C题代码&#xff1a; #include<bits/stdc.h>using namespace std…

模型 OIIC(目标、障碍、洞察、挑战)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_总纲目录。沟通方案工具。 1 OIIC(目标、障碍、洞察、挑战)模型的应用 1.1 OIIC 驱动的汽车配件渠道优化 一家知名的汽车配件制造商&#xff0c;旗下品牌拥有众多产品&#xff0c;其销售渠道广泛&#xff0c;不仅在…

【涨薪技术】掌握加密签名接口测试实战!

接口加密是指在网络传输过程中&#xff0c;将数据进行加密&#xff0c;以保护数据的安全性。接口加密可以采用多种加密算法&#xff0c;如AES、DES、RSA等。测试接口加密的目的是验证接口加密算法的正确性和安全性。 1加密与加密算法 加密&#xff08;Encrypt&#xff09;是将…

平衡,才是世界生生不息的真谛

凤凰涅槃&#xff0c;浴火重生。这句话是很有哲理的&#xff0c;可以运用到命运中。而对于命运&#xff0c;以中为最好&#xff0c;即是平衡。然而&#xff0c;每一个人&#xff0c;都是要经历命运的锤炼&#xff0c;无论怎样锤炼&#xff0c;都要保持一颗善良的心&#xff0c;…

2024.02.23作业

1. 尝试处理普通信号 #include "test.h"#define MAXSIZE 128void handler(int signo) {if (SIGINT signo){printf("用户按下了 ctrl c 键\n");} }int main(int argc, char const *argv[]) {if (signal(SIGINT, SIG_IGN) SIG_ERR){perror("signal …