[AIGC] 动态规划的类型以及在 LeetCode 上的应用

动态规划是一种解决问题的优秀策略,它适用于涉及优化问题、组合问题及最短路径问题等领域。下面我们来探究几类常见的动态规划问题,并提供相应的 LeetCode 题目以及 Java 代码实现。


文章目录

    • 1. 一维动态规划
    • 2. 二维动态规划
    • 3. 背包型动态规划

1. 一维动态规划

这种类型的动态规划问题有单一的状态组成,我们可以使用一个一维数组来记录状态值。

例如 LeetCode 上的 70. 爬楼梯问题:假设你正在爬楼梯,需要 n 步你才能到达顶部。每次你可以爬 1 或 2 个台阶,问总共有多少种不同的方法可以爬到楼顶?

我们可以通过以下的 java代码解决:

class Solution {public int climbStairs(int n) {if (n <= 2) {return n;}int pre2 = 1, pre1 = 2;for (int i = 3; i <= n; i++) {int cur = pre1 + pre2;pre2 = pre1;pre1 = cur;}return pre1;}
}

2. 二维动态规划

这种类型的动态规划问题有两个状态,通常我们会使用一个二维数组来记录状态值。

例如 LeetCode 上的 62. 不同路径问题:一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步,机器人试图到达网格的右下角,问总共有多少条不同的路径?

我们可以通过以下的 java代码解决:

class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {dp[i][0] = 1;}for (int j = 0; j < n; j++) {dp[0][j] = 1;}for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
}

3. 背包型动态规划

背包问题是最常见的动态规划问题,其中我们要期望在满足一定约束的情况下,优化特定的目标函数。

例如 LeetCode 上的 416. 分割等和子集问题:给定一个只包含正整数的非空数组,是否可以将这个数组分割成两个子集,使得两个子集的元素和相等?

我们可以通过以下的 java代码解决:

class Solution {public boolean canPartition(int[] nums) {int total = 0;for (int num : nums) {total += num;}if (total % 2 != 0) { return false; }int target = total / 2;boolean[] dp = new boolean[target + 1];dp[0] = true;for (int num : nums) {for (int i = target; i >= num; i--) {dp[i] |= dp[i - num];}}return dp[target];}
}

理解动态规划的关键在于理解其状态转移方程,并能够根据问题的具体情况,进行合理的状态设计和状态转移,进而找到问题的解。

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

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

相关文章

Unity URP简单烘焙场景步骤

Unity URP简单烘焙场景步骤 前言项目场景布置灯光模型Lighting设置环境设置烘焙前烘焙后增加角色 问题解决黑斑硬边清理缓存 参考 前言 项目中要烘焙一个3D场景&#xff0c;用的URP渲染管线&#xff0c;简单记录一下。 项目 场景布置 灯光 因为场景中有能动的东西&#xf…

JAVA每日作业day6.24

ok了家人们今天学习了一些关键字&#xff0c;用法和注意事项&#xff0c;静态代码块这些知识&#xff0c;闲话少叙我们一起看看吧。 一&#xff0c;final关键字 1.1 final关键字的概述 final&#xff1a; 不可改变。可以用于修饰类、方法和变量。 类&#xff1a;被修饰的类&a…

GPT-5 一年半后发布?对此你有何期待?

GPT-5的即将发布无疑引发了广泛的关注和讨论。以下是一些对GPT-5潜在影响和应用场景的见解和期待&#xff1a; 1. 提升工作效率 GPT-5可能会在很多领域进一步提升工作效率。其“博士级”智能在特定任务上的表现可以帮助专业人士更快地完成复杂的工作。例如&#xff0c;在法律…

Zoho邮箱怎么注册?最强完整指南

Zoho企业邮箱&#xff0c;凭借其16年的产品历程和卓越的服务品质&#xff0c;已经成为全球超过1800万企业级客户的信赖之选。今天&#xff0c;我们将手把手教你如何注册Zoho邮箱。 一、Zoho邮箱是什么&#xff1f; Zoho邮箱是Zoho Workplace套件中的核心产品&#xff0c;专门…

Java中的正则表达式使用技巧

Java中的正则表达式使用技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们来探讨一下Java中正则表达式的使用技巧。正则表达式是一种强大…

【昇思初学入门】第六天打卡

函数式自动微分 学习心得 反向传播&#xff1a;神经网络在训练时&#xff0c;会使用一个叫做“反向传播”的方法。这个方法的基本思路是这样的&#xff1a;首先&#xff0c;神经网络会做出一个预测&#xff08;我们称之为“logits”&#xff09;&#xff0c;然后我们将这个预…

【Python】已解决ModuleNotFoundError: No module named ‘requests’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决ModuleNotFoundError: No module named ‘requests’ 一、分析问题背景 在使用Python进行网络编程或数据抓取时&#xff0c;requests库因其简洁易用的特性而受到广泛欢迎。然…

简说caffe

Caffe&#xff08;Convolutional Architecture for Fast Feature Embedding&#xff09;是一个开源的深度学习框架&#xff0c;由加州大学伯克利分校的Berkeley Vision and Learning Center&#xff08;BVLC&#xff09;开发。它主要用于图像分类、分割和图像生成等任务。以下是…

PrestaShop的一些使用介绍

目录 PrestaShop 是一个功能丰富的开源电子商务解决方案。 1. 以下是其基本概念和架构的一些要点&#xff1a; 2. PrestaShop 的模块开发是扩展其功能的重要方式。以下是对 PrestaShop 模块开发的详细介绍&#xff1a; 开发环境准备&#xff1a; 3. PrestaShop 的模块开发允…

Vue项目环境搭建及git仓库新建

不会安装的 可以找下博客&#xff0c;我会在另外一个博客 单独讲解git的安装 接下后启动对应的git bash文件&#xff0c;可以发送快捷方式到桌面 启动git命令的窗口 之后就可以在对应的文件下&#xff0c;启动git命令窗口了 3.码云-项目代码管理仓库 链接&#xff1a;https:…

年化16.6%,全球大类资产使用lightGBM预测轮动——数据缓存提升效率

原创文章第568篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 Dataloader缓存 加载160个因子&#xff0c;10几支大类资产&#xff0c;这个计算还是需要一点时间&#xff0c;尤其在我们频繁运行的时候&#xff0c;需要等待&#xff0c;这里我们…

软件著作权申请(未完待续)

申请网站&#xff1a;中国版权保护中心 注册登录 选择注册身份&#xff0c;个人还是单位

Java基础:IO流

目录 一、定义 1.引言 2.分类 &#xff08;1&#xff09;按照流的方向分 &#xff08;2&#xff09;按操作文件的类型分 3.体系结构 二、字节流&#xff08;以操作本地文件为例&#xff09; 1. FileOutputStream 类 &#xff08;1&#xff09;定义 &#xff08;2&am…

持续总结中!2024年面试必问的操作系统面试题(一)

一、什么是操作系统&#xff1f;它有哪些基本功能&#xff1f; 操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;是计算机系统中的一个关键软件&#xff0c;它管理计算机硬件资源并提供各种服务以方便用户和应用程序的运行。操作系统充当了用户与计算机硬…

赶紧收藏!2024 年最常见的操作系统面试题(一)

一、进程与线程的区别是什么&#xff1f; 进程与线程是操作系统中两种不同的执行单元&#xff0c;它们在资源使用、调度方式、通信机制等方面存在显著的区别。以下是进程与线程之间的主要区别&#xff1a; 定义&#xff1a; 进程&#xff1a;进程是操作系统进行资源分配和调度…

【tcomat】聊聊tomcat是如何打破双亲委派模型进行类加载的

双亲委派模型 对于JVM类加载器来说&#xff0c;其实就是如下的code&#xff0c;JDK提供的三个类加载器&#xff0c;每个类加载器都加载自己范围内的类。Boot\EXT\APP 三个。双亲委派一句话就是&#xff0c;先让老爸处理&#xff0c;老爸处理不了&#xff0c;给爷爷。爷爷处理不…

x86 的 ebp 寄存器,可能比 cr3 更重要,好好掰扯一下 ebp

在 x86 架构的计算机中&#xff0c;ebp&#xff08;Extended Base Pointer&#xff09;寄存器通常用于指向当前函数的栈帧&#xff08;stack frame&#xff09;的基地址。栈帧是函数调用期间在栈上分配的一块内存区域&#xff0c;用于存储局部变量、函数参数、返回地址和其他临…

JUC线程池最佳实践

参考&#xff1a;Java 线程池最佳实践 | JavaGuide 使用构造函数创建线程池。【使用有界队列&#xff0c;控制线程创建数量】 SpringBoot 中的 Actuator 组件 / ThreadPoolExecutor 的相关 API监控线程池运行状态 是不同的业务使用不同的线程池【父子任务用同一个线程池容易死…

构建LangChain应用程序的示例代码:40、如何使用各种本地版本的 LLaMA2 进行文本到SQL的转换指南

概述 开源的本地大型语言模型&#xff08;LLMs&#xff09;非常适合那些需要数据隐私的应用场景。SQL是一个很好的例子。本指南展示了如何使用各种本地版本的 LLaMA2 进行文本到SQL的转换。 包安装 Python安装命令&#xff1a; ! pip install langchain replicate 大型语言…

Excel 宏录制与VBA编程 —— 12、工作簿相关操作

代码1 - 新建、保存工作簿 Sub WorkbooksTest() 创建工作簿Workbooks.Add 创建工作簿并保存至本地Workbooks.Add.SaveAs Filename:"C:\Users\jxd\Desktop\workbook.xlsx"End Sub代码2 - 打开、保存、关闭工作簿 Sub WorkbooksTest() 打开工作簿Workbooks.Open File…