动态规划入门

动态规划入门


文章目录

      • 动态规划入门
        • 动态规划的概念
        • dp的重点
        • 必须存在 “重叠子问题”
        • 必须满足 “最优子结构”
        • 状态定义与状态转移方程
        • 例子
        • 动态规划的解题步骤
        • 例题

动态规划的概念

动态规划(Dynamic Programming,DP):是一种求解多阶段决策过程最优化问题的方法。在动态规划中,通过把原问题分解为相对简单的子问题,先求解子问题,再由子问题的解而得到原问题的解。

动态规划是一种解决多阶段决策最优化问题的算法思想,核心逻辑是:将复杂问题分解为若干个重叠的子问题,通过存储子问题的最优解,避免重复计算,最终推导出原问题的最优解。


dp的重点

其中的一些要点:


例子

假设你是商店收银员,现在需要给顾客找5 元零钱,手头的硬币面值只有三种:1元、2元、5元(硬币数量无限)。

要求:用最少的硬币数凑出 5 元,怎么凑?

我们用dp[i]表示:凑出 i 元零钱需要的最少硬币数

比如:dp[1] = 凑 1 元需要的最少硬币数;

对于每个金额i(从 1 到 5),我们可以尝试用每一种硬币面值coin(1、2、5):


动态规划的解题步骤
  1. 定义状态:明确 dp [i](或 dp [i][j]、dp [i][j][k])代表什么,必须具体、无歧义;
  2. 确定边界条件:初始化最小子问题的解(如 dp [0]、dp [1]),避免递推时数组越界或逻辑错误;
  3. 推导状态转移方程:核心步骤,找到 “当前状态” 与 “前序状态” 的关系;
  4. 计算最终结果:通过迭代(推荐)或递归 + 记忆化,从边界条件递推到原问题的解。

例题

力扣983.最低票价

在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为days的数组给出。每一项是一个从1365的整数。

火车票有三种不同的销售方式

通行证允许数天无限制的旅行。 例如,如果我们在第2天获得一张为期 7 天的通行证,那么我们可以连着旅行 7 天:第2天、第3天、第4天、第5天、第6天、第7天和第8天。

返回你想要完成在给定的列表days中列出的每一天的旅行所需要的最低消费

intdata[3]={1,7,30};intmincostTickets(int*days,intdaysSize,int*costs,intcostsSize){int*dp=(int*)malloc((daysSize+1)*sizeof(int));for(inti=0;i<daysSize;i++){dp[i]=9999;}dp[daysSize]=0;for(inti=daysSize-1;i>=0;i--){for(intk=0;k<3;k++){intj=i;while(j<daysSize&&data[k]+days[i]>days[j]){j++;}inttemp=costs[k]+dp[j];if(temp<dp[i]){dp[i]=temp;}}}returndp[0];}

力扣42.接雨水

给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

intmax(inta,intb){returna>=b?a:b;}intmin(inta,intb){returna>=b?b:a;}inttrap(int*height,intheightSize){if(heightSize<=2){return0;}intl[heightSize],r[heightSize];l[0]=height[0];for(inti=1;i<heightSize;i++){l[i]=max(l[i-1],height[i]);}r[heightSize-1]=height[heightSize-1];for(inti=heightSize-2;i>=0;i--){r[i]=max(r[i+1],height[i]);}intans=0;for(inti=1;i<heightSize-1;i++){ans+=max(0,min(l[i-1],r[i+1])-height[i]);}returnans;}

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

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

相关文章

瑞雪覆村暖人心 义工行动护出行——赵官屯村三支队伍义工清扫积雪保平安

冬日寒风起&#xff0c;瑞雪覆村居。作为全国以孝治家试点单位&#xff0c;赵官屯村自揭牌落地以来&#xff0c;始终严格按照《以孝治家行动部署》标准执行不走样&#xff0c;将“全心全意为人民服务”的以孝治家行动宗旨&#xff0c;融入日常工作的点点滴滴。12月13日&#xf…

22、服务器模块详细设计解析

服务器模块详细设计解析 1. 目录操作与 HTML 构建 目录列表的获取需要从文件描述符读取,这意味着它必须经过开放文件管理器,并且可能会因超时被中止。而 HTML 的构建则是使用 TextFrag 模块进行的复杂文本格式化操作。代码假设服务器中有一个 /icons 的 URL 路径用于获…

23、Swerve详细设计解析

Swerve详细设计解析 1. IETF层 IETF层实现了处理构成互联网协议消息的数据类型的模块,对于HTTP而言,这些数据包括头部信息、状态消息和MIME编码的实体。 2. 实体模块 实体模块为通过HTTP传输的所有HTML页面、图像等实现了 Entity 类型,还包含简单的MIME类型处理。服务…

群晖引导工具终极指南:RR与ARPL完整对比分析

引言&#xff1a;探索黑群晖引导方案 【免费下载链接】rr Redpill Recovery (arpl-i18n) 项目地址: https://gitcode.com/gh_mirrors/rr2/rr 面对琳琅满目的黑群晖引导工具&#xff0c;你是否曾陷入选择困境&#xff1f;手动编译的复杂性、配置错误的困扰、版本兼容的挑…

OpenCV全景图像拼接终极指南:从入门到精通

OpenCV全景图像拼接终极指南&#xff1a;从入门到精通 【免费下载链接】opencv OpenCV: 开源计算机视觉库 项目地址: https://gitcode.com/gh_mirrors/opencv31/opencv OpenCV全景图像拼接技术能够将多张具有重叠区域的照片无缝合成为一张视野广阔的全景图&#xff0c;广…

手把手教你学Simulink——机器人轨迹跟踪场景实例:基于Simulink的永磁同步电机关节空间直线轨迹跟踪控制仿真

目录 手把手教你学Simulink——机器人轨迹跟踪场景实例&#xff1a;基于Simulink的永磁同步电机关节空间直线轨迹跟踪控制仿真 一、引言&#xff1a;从“能动”到“精准动”——轨迹跟踪是机器人智能运动的核心 二、系统架构与控制策略 1. 整体控制框图 2. 关节空间直线轨迹…

HTTP一些问题的解答(接上篇)

一、在弱网环境下HTTP1会比HTTP2更快的原因是啥&#xff1f;在弱网环境&#xff08;高延迟、高丢包率&#xff09;下&#xff0c;HTTP/1.x 有时比 HTTP/2 表现更好&#xff0c;核心原因是 HTTP/2 的多路复用机制与 TCP 协议的固有缺陷在弱网下产生了 “负协同效应”&#xff0c…

11、50个Python实用技巧大揭秘

50个Python实用技巧大揭秘 一、Python简介 Python是一种编程语言,能让你更高效地工作,更有效地集成系统。如今,它是开源领域最受欢迎的编程语言之一,从各种配置工具到XML解析,随处可见它的身影。下面为你介绍50个实用的Python技巧,助你提升编程体验。 二、Python基础操…

24、Swerve详细设计解析

Swerve详细设计解析 1. IETF_Line和IETF_Part模块 1.1 功能概述 IETF_Line模块的主要功能是依据HTTP请求的语法规则,将字符串拆分为标记(tokens)和特殊字符。拆分后的结果是一个由IETF_Part模块中定义的Part类型元素组成的列表。 1.2 Part类型定义 datatype Part =Tok…

【闲话】2025.12.12 记梦

魔幻,恐怖。故事的第一幕发生在调研考试还剩最后一科,不过这一次物化生系列却是先考生物再考化学,有点神秘。考完生物后刚打算发化学卷子,突然有一个老师进来让我们先上 \(20 \min\) 学科自习,然后会有专门的老师…

手把手教你学Simulink--机器人基础关节控制场景实例:基于Simulink的BLDC关节方波控制与正弦波控制对比仿真

目录 手把手教你学Simulink--机器人基础关节控制场景实例&#xff1a;基于Simulink的BLDC关节方波控制与正弦波控制对比仿真 一、引言&#xff1a;为什么对比方波控制与正弦波控制&#xff1f;——BLDC关节的“成本-性能权衡” 二、核心原理&#xff1a;方波控制 vs 正弦波控…

45、GNU调试器gdb使用指南

GNU调试器gdb使用指南 在软件开发过程中,调试是解决程序问题、优化性能的重要环节。GNU调试器(gdb)是一款强大的调试工具,能够帮助开发者深入分析程序的运行状态。下面将详细介绍gdb在不同场景下的使用方法。 1. 附加到正在运行的进程 在命令行中,可以使用以下语法将gd…

2025最新深度解析:吉林长春出租车顶灯广告市场主流服务商概览 - 2025年11月品牌推荐榜

一、摘要 吉林长春的出租车顶灯广告作为城市流动的视觉名片,其行业发展已趋于成熟与专业化。这一媒介凭借其覆盖广、强制曝光、性价比高等特点,成为本地商家进行区域精准营销的重要选择。目前市场涌现了一批提供相关…

移动端兼容性测试的技术纵深与实践突破

1 专项测试的技术演进脉络 随着移动应用生态的复杂化&#xff0c;专项测试已从早期的功能验证延伸至性能、安全、兼容性等多维评估体系。移动端兼容性测试作为其中关键环节&#xff0c;需要应对设备碎片化、系统版本差异化、网络环境动态化三大核心挑战。据统计&#xff0c;目…

春夏选纸纱线,FSC 14 - 16 针,这几家有实力的公司

春夏 FSC 14 - 16 针纸纱线&#xff1a;有实力公司的选择引言在时尚潮流不断演变的当下&#xff0c;春夏针织服饰对于纱线的要求也越来越高。FSC 认证的纸纱线以其环保和独特的性能成为了众多品牌的心头好&#xff0c;特别是适用于 14 - 16 针的纸纱线&#xff0c;在市场上备受…

如何快速上手GOT-OCR-2.0:全场景文字识别的终极指南

如何快速上手GOT-OCR-2.0&#xff1a;全场景文字识别的终极指南 【免费下载链接】GOT-OCR-2.0-hf 阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型&#xff0c;支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特…

23207114-齐宇硕-题目集4~5以及课堂测验总结

前言本阶段的学习主要围绕两次题目集和一次课堂测验展开,其中核心内容是数字电路模拟程序的设计与实现。题目集四和五呈现了从简单到复杂的渐进式设计过程,考察了面向对象编程、算法设计、将实体抽象为数据类型的能力…

题目集4-5以及课堂测试的总结

前言: 这三周我们完成了围绕数字电路展开的两次大作业。第四次作业仅仅进行了基础逻辑门的电路模拟,第五次作业在此基础上新增三态门、译码器、数据选择器、数据分配器等带控制引脚的复杂元件。同时我们还在课堂上进…

深入解析:运筹说145期:从快递到自动驾驶:启发式算法的智慧幕后

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java 线程池ThreadPoolExecutor的工作原理

Java 线程池是基于池化思想的线程管理机制,核心目的是复用线程、控制并发数、降低线程创建 / 销毁的开销,同时提供任务排队、拒绝策略、线程监控等能力。它的实现核心在java.util.concurrent包中的ThreadPoolExecutor类(以及其封装类如Executors创建的线程池),下面从核心组…