算法系列--动态规划--背包问题(4)--完全背包拓展题目

💕"这种低水平质量的攻击根本就不值得我躲!"💕
作者:Lvzi
文章主要内容:算法系列–动态规划–背包问题(4)–完全背包拓展题目
在这里插入图片描述

大家好,今天为大家带来的是算法系列--动态规划--背包问题(4)--完全背包拓展题目

一.零钱兑换

链接:
https://leetcode.cn/problems/coin-change/submissions/517819340/
在这里插入图片描述

分析:
本题就是一个完全背包问题的体现,完全背包问题最大的特点就是物品的数量是无限制的,在本题中硬币的数量也是无限制的,所以本题依旧可以采用动态规划的思想解决

状态表示:

  • dp[i][j]:在[1,i]区间内的硬币中选择,实现总额为j元的最小硬币组合数

状态转移方程:

初始化:
由于可能无法使用一定组合的硬币实现j元,此时的状态应该为-1,在选择nums[i]这种情况下,为了不使用无效的数据所以我们需要特殊判断一下,目的是不使用无效的数据,那么只要在填表的时候无效数据不会被使用到即可,这里我们求的是两种情况的最小值,如果不想使用无效数据,可以将无效数据设置为0x3f3f3f3f,这样无效数据对我们的初始化就没有影响了

代码:

class Solution {public int coinChange(int[] coins, int amount) {int n = coins.length;int[][] dp = new int[n + 1][amount + 1];// 创建dp表for(int j = 1; j <= amount; j++) dp[0][j] = 0x3f3f3f3f;// 初始化为最大值 for(int i = 1; i <= n; i++) {for(int j = 0; j <= amount; j++) {dp[i][j] = dp[i - 1][j];if(j - coins[i - 1] >= 0)// 不能超过最大容量dp[i][j] = Math.min(dp[i][j],dp[i][j - coins[i - 1]] + 1);}}// 注意这种恰好等于的背包问题  最后的返回值一定要特判一下return dp[n][amount] == 0x3f3f3f3f ? -1 : dp[n][amount];}
}

空间优化:

class Solution {public int coinChange(int[] coins, int amount) {int n = coins.length;int[] dp = new int[amount + 1];// 创建dp表for(int j = 1; j <= amount; j++) dp[j] = 0x3f3f3f3f;// 初始化为最大值 for(int i = 1; i <= n; i++)for(int j = coins[i - 1]; j <= amount; j++)dp[j] = Math.min(dp[j],dp[j - coins[i - 1]] + 1);// 注意这种恰好等于的背包问题  最后的返回值一定要特判一下return dp[amount] == 0x3f3f3f3f ? -1 : dp[amount];}
}

思考的难点:

  1. 如何通过设置无效的数据来进行初始化,在选nums[i]这种情况时,我们之所以要判断一下是为了不使用符合该条件的数据(无效数据 -1),我们这里求的是最小值,只需要保证在填数据的时候不使用就行,那么就可以将无效数据设置为最大值,这样就不会使用到无效数据了

2.零钱兑换II

链接:
https://leetcode.cn/problems/coin-change-ii/

分析:

本题就是统计情况数

这道题就是完全背包版本的
目标和

代码:

class Solution {public int change(int amount,int[] coins) {int n = coins.length;int[][] dp = new int[n + 1][amount + 1];// 创建dp表dp[0][0] = 1;// 初始化// 填表for(int i = 1; i <= n; i++) {for(int j = 0; j <= amount; j++) {dp[i][j] = dp[i - 1][j];if(j - coins[i - 1] >= 0)dp[i][j] += dp[i][j - coins[i - 1]];}}return dp[n][amount];}
}

空间优化:

class Solution {public int change(int amount,int[] coins) {int n = coins.length;int[] dp = new int[amount + 1];// 创建dp表dp[0] = 1;// 初始化// 填表for(int i = 1; i <= n; i++)for(int j = coins[i - 1]; j <= amount; j++)dp[j] += dp[j - coins[i - 1]];return dp[amount];}
}

三.完全平方数

链接:
https://leetcode.cn/problems/perfect-squares/
在这里插入图片描述

分析:

本题分析下来,要完成的操作就是使用尽可能少的完全平方数表示n,每个完全平方数的数目是无限制的(挑选的物品无限制就很有可能是完全背包问题)

在这里插入图片描述
注意这里最重要返回的结果是组合数最少的,其余的思路和完全背包问题一致,不做过多的讲解

class Solution {public int numSquares(int n) {int m = (int)Math.sqrt(n);// 求出数组的长度int[][] dp = new int[m + 1][n + 1];// 创建dp表for(int j = 1; j <= n; j++) dp[0][j] = 0x3f3f3f3f;// 初始化for(int i = 1; i <= m; i++) {for(int j = 1; j <= n; j++) {dp[i][j] = dp[i - 1][j];if(j - i * i >= 0)dp[i][j] = Math.min(dp[i][j],dp[i][j - i * i] + 1);}}return dp[m][n];}
}

空间优化后的代码

class Solution {public int numSquares(int n) {int m = (int)Math.sqrt(n);// 求出数组的长度int[] dp = new int[n + 1];// 创建dp表for(int j = 1; j <= n; j++) dp[j] = 0x3f3f3f3f;// 初始化for(int i = 1; i <= m; i++)for(int j = i * i; j <= n; j++)dp[j] = Math.min(dp[j],dp[j - i * i] + 1);return dp[n];}
}

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

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

相关文章

Linux 常见性能分析方法论介绍(业务负载画像、下钻分析、USE方法论,检查清单)

写在前面 博文内容为 《BPF Performance Tools》 读书笔记整理内容涉及常用的性能调优方法论介绍&#xff1a;业务负载画像下钻分析USE方法论检查清单理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼…

时序预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络时间序列预测

时序预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现OOA-BP鱼鹰算法优化BP神经网络时间序列预测&#xff08;完整源码和数据…

Github profile Readme实现小游戏[github自述游戏]

Github profile Readme常用于个人主页介绍&#xff0c;将它与action自动化流程结合&#xff0c;可以实现一些小游戏 例如&#xff1a;2048、五子棋 2048实现 losehu (RUBO) GitHub 五子棋 https://github.com/losehu/losehu/tree/main 通过python/C编写可执行文件&#xf…

相机标定学习记录

相机标定是计算机视觉和机器视觉领域中的一项基本技术&#xff0c;它的主要目的是通过获取相机的内部参数&#xff08;内参&#xff09;和外部参数&#xff08;外参&#xff09;&#xff0c;以及镜头畸变参数&#xff0c;建立起现实世界中的点与相机成像平面上对应像素点之间准…

[linux初阶][vim-gcc-gdb] TwoCharter: gcc编译器

目录 一.Linux中gcc编译器的下载与安装 二.使用gcc编译器来翻译 C语言程序 ①.编写C语言代码 ②翻译C语言代码 a.预处理 b.编译 c.汇编 d.链接 ③.执行Main 二进制可执行程序(.exe文件) 三.总结 一.Linux中gcc编译器的下载与安装 使用yum命令(相当于手机上的应用…

2024年AI大模型基础设施栈市场地图

2024年大模型(LLM)基础架构的组件和工具,最近看到国外的一篇深度分析,技术负责人可以重点关注:附带图谱: 一、现代LLM基础设施栈定义 根据Menlo Ventures的数据,2023年企业在现代AI基础设施栈上的支出超过11亿美元,成为生成式AI中最大的新市场,为初创企业提供了巨大的…

Spring Web MVC的入门学习(一)

目录 一、什么是 Spring Web MVC 1、MVC 定义 二、学习Spring MVC 1、项目准备 2、建立连接 2.1 RequestMapping 注解的学习 2.2 RequestMapping 使用 3、请求 3.1 传递单个参数 3.2 传递多个参数 3.3 传递对象 3.4 后端参数重命名&#xff08;后端参数映射&#xf…

Cortex-A7 常用汇编指令

一、处理器内部数据传输指令 使用处理器做的最多事情就是在处理器内部来回的传递数据&#xff0c;常见的操作有&#xff1a; ①、将数据从一个寄存器传递到另外一个寄存器。 ②、将数据从一个寄存器传递到特殊寄存器&#xff0c;如 CPSR 和 SPSR 寄存器。 ③、将立即数传递到寄…

暴力破解pdf文档密码

首先安装pdfcrack工具包 apt install pdfcrack 默认密码字典存储在/usr/share/wordlists里&#xff0c;是gz文件&#xff0c;将它解压并copy到pdf目录 然后使用pdfcrack破解 密码在最后一行user-password的单引号里

深入理解计算机系统 家庭作业 2.62

#include <stdio.h> int int_shifts_are_arithmetic(); int main(void) { printf("%d",int_shifts_are_arithmetic()); } int int_shifts_are_arithmetic() { return!(~(-1>>(sizeof(int)))); }

黄金票据制作-新手向

黄金票据制作 文章目录 黄金票据制作0x01 前言0x02 黄金票据的制作一、靶场搭建二、收集制作信息获取域名称获取域SID值获取域用户krbtgt密码hash值 二、制作票据 0x03 验证票据有效性 0x01 前言 最近&#xff0c;我学习了内网渗透的相关知识&#xff0c;其中包括了黄金票据的…

Django详细教程(一) - 基本操作

文章目录 前言一、安装Django二、创建项目1.终端创建项目2.Pycharm创建项目&#xff08;专业版才可以&#xff09;3.默认文件介绍 三、创建app1.app介绍2.默认文件介绍 四、快速上手1.写一个网页步骤1&#xff1a;注册app 【settings.py】步骤2&#xff1a;编写URL和视图函数对…

阿里云2核4G云服务器支持多少人同时在线?并发数计算?

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

【隐私计算实训营006隐语PIR介绍及开发实践】

1. 隐语实现PIR总体介绍 隐匿查询&#xff08;Private Information Retrieval PIR&#xff09;定义 按服务器数量分类 单服务器方案&#xff08;Single Server&#xff09;多服务器方案&#xff08;Multi-Server&#xff09; 按查询类型分类 Index PIRKeyword PIR 隐语目前…

Chrome浏览器 安装Vue插件vue-devtools

前言 vue-devtools 是一个为 Vue.js 开发者设计的 Chrome 插件。它可以让你更轻松地审查和调试 Vue 应用程序。与普通的浏览器控制台工具不同&#xff0c;Vue.js devtools 专为 Vue 的响应性数据和组件结构量身定做。 1. 功能介绍 组件树浏览&#xff1a;这个功能可以让你查…

Map和List输入的两种不同json格式

一、List to json格式 [{"type":"top.lovemom.pojo.ESP8266","devicePosition":"家里的阳台","deviceRemark":"我的设备1","publicIp":"127.0.0.1","userEmail":"123bggb.to…

CCF-CSP认证考试 202212-3 JPEG 解码 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202212-3 JPEG 解码 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题背景 四年一度的世界杯即将画上尾声。在本次的世界杯比赛中&#xff0c;视频助理裁判&…

【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统概述

系列文章目录 【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍 文章目录 系列文章目录[TOC](文章目录) 前言一、Linux 概述1.1、GNU 与自由软件1.2、Linux是什么1.3、Linux 特色1.4、Linux的优缺点1.4.1、Linux 优点1.4.2、Linux 缺点 二、虚拟机介绍2.1…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考&#xff1a;https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1&#xff09;docker直接运行SRS服务&#xff1a; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

【字节二面】SpringBoot可以同时处理多少请求

目录 一、示例代码二、那么springboot可以处理多少请求&#xff1f;三、maxConnections、maxThreads、acceptCount的关系 一、示例代码 RestController Slf4j public class RequestController {GetMapping("/test")public String test(HttpServletRequest request) …