带你读《图解算法小抄》二十一、动态规划(15)

简介: 带你读《图解算法小抄》二十一、动态规划(15)

带你读《图解算法小抄》二十一、动态规划(14)https://developer.aliyun.com/article/1347948?groupCode=tech_library.


2)解题步骤

为了解决最小下降路径和的问题,我们可以使用动态规划的思想来解决。

 

  • 定义状态:我们使用一个二维数组 dp 来表示动态规划的状态,其中 dp[i][j] 表示从第一行到第 i 行的最小下降路径和,且路径的最后一个元素位于第 i 行的第 j 列。
  • 初始化状态:我们将 dp 数组初始化为一个与 matrix 数组相同大小的二维数组,并将第一行的元素复制到 dp 数组中。
  • 定义状态转移方程:对于每个位置 (i, j),我们需要考虑从上一行的哪个位置 (i-1, k) 转移而来,其中 k 的取值范围为 [j-1, j, j+1],我们选择转移过来的路径中和最小的那个路径,即 dp[i][j] = matrix[i][j] + Math.min(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1])
  • 最终结果:路径的最小下降路径和将会出现在 dp[n-1][j] 中的最小值,其中 n 是数组的大小。

 

 

下面是使用动态规划解决最小下降路径和问题的算法框架:

 

function minFallingPathSum(matrix) {
  const n = matrix.length;
  const dp = [...matrix];  for (let i = 1; i < n; i++) {
    for (let j = 0; j < n; j++) {
      dp[i][j] += Math.min(
        dp[i - 1][j - 1] ?? Infinity,
        dp[i - 1][j],
        dp[i - 1][j + 1] ?? Infinity
      );
    }
  }
  return Math.min(...dp[n - 1]);
}

23.最小下降路径和

1)题目描述

给定一个大小为 n x n 的二维整数数组 matrix,找到从第一行到最后一行的最小下降路径和。每一步只能移动到下一行中相邻的元素上。在这里,相邻的元素指的是位于当前元素右下方和右下方的两个元素。

要求路径上的数字总和最小。

2)解题步骤

为了解决最小下降路径和的问题,我们可以使用动态规划的思想来解决。

 

  • 定义状态:我们使用一个二维数组 dp 来表示动态规划的状态,其中 dp[i][j] 表示从第一行到第 i 行的最小下降路径和,且路径的最后一个元素位于第 i 行的第 j 列。
  • 初始化状态:我们将 dp 数组初始化为一个与 matrix 数组相同大小的二维数组,并将第一行的元素复制到 dp 数组中。
  • 定义状态转移方程:对于每个位置 (i, j),我们需要考虑从上一行的哪个位置 (i-1, k) 转移而来,其中 k 的取值范围为 [j-1, j, j+1],我们选择转移过来的路径中和最小的那个路径,即 dp[i][j] = matrix[i][j] + Math.min(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1])
  • 最终结果:路径的最小下降路径和将会出现在 dp[n-1][j] 中的最小值,其中 n 是数组的大小。

下面是使用动态规划解决最小下降路径和问题的算法框架:

 

function minFallingPathSum(matrix) {
  const n = matrix.length;
  const dp = [...matrix];  for (let i = 1; i < n; i++) {
    for (let j = 0; j < n; j++) {
      dp[i][j] += Math.min(
        dp[i - 1][j - 1] ?? Infinity,
        dp[i - 1][j],
        dp[i - 1][j + 1] ?? Infinity
      );
    }
  }
  return Math.min(...dp[n - 1]);
}


带你读《图解算法小抄》二十一、动态规划(16)https://developer.aliyun.com/article/1347938?groupCode=tech_library

相关文章
|
1月前
|
人工智能 自然语言处理 安全
AutoGen框架入门:5个核心概念搭建智能体协作系统
AutoGen是微软开源的多智能体AI框架,支持多个AI智能体与人类协作,通过对话完成复杂任务。各智能体具备不同角色与能力,可调用工具、执行代码,并在群聊中辩论、推理、纠错,实现无需人工干预的自动化协作,适用于复杂问题求解与团队化AI应用开发。
241 13
AutoGen框架入门:5个核心概念搭建智能体协作系统
|
23天前
|
人工智能 SEO
智能体最新消息:从技术爆点到产业浪潮,三大趋势透视下一代人机协作范式
2024年AI智能体爆发,正重塑商业与职业格局。三大趋势凸显:智能体从工具升为战略核心,驱动企业模式创新;能力平民化催生“智能体操盘手”新职业;政策与资本共推教育生态成型。智能体已成工作新常态,时代变革亟待主动拥抱。
|
29天前
|
人工智能 搜索推荐 安全
seo 是啥意思?选对方式 + 看未来发展超简单!
SEO即搜索引擎优化,通过优化网站内容与结构,提升在搜索结果中的排名,获取免费流量。核心是用户体验,需长期投入,白帽为正道。未来SEO将融合AI与多平台搜索,GEO等新机遇涌现,助力品牌曝光与增长。
|
24天前
|
自然语言处理 Java 开发工具
《零代码到智能体:蚂蚁百宝箱TBox Agent SDK实战指南》
蚂蚁百宝箱开放OpenAPI/SDK调用智能体,开发者每月享10亿免费token。本文教你如何创建智能体,并用Python、Java等代码快速集成调用,涵盖对话与内容生成应用的构建全流程。
395 0
《零代码到智能体:蚂蚁百宝箱TBox Agent SDK实战指南》
|
27天前
|
云安全 弹性计算 安全
高危预警:用友 U8 Cloud 漏洞成勒索攻击新入口
近期,用友U8 Cloud多个高危漏洞遭 exploited,导致阿里云客户遭遇勒索攻击。涉及反序列化、远程命令执行及文件上传漏洞,影响2.0至5.1全系列版本。攻击者可任意执行代码、加密数据勒索。建议立即修补、备份并启用安全防护措施。
|
SQL 分布式计算 数据处理
FlinkSQL开发经验分享
FlinkSQL开发经验分享
424 8
|
自动驾驶 物联网 5G
什么是 5G 以及它如何工作?
【8月更文挑战第23天】
2919 0
|
机器学习/深度学习 人工智能 算法
未来已来:探索量子计算在Web开发中的应用
在这篇文章中,我们将穿越技术的迷雾,一窥未来。量子计算,这一曾经只存在于理论中的技术,正逐渐走近现实,它的革命性潜力正在被探索其在Web开发中的潜在应用。本文将带你了解量子计算的基本概念,以及它可能如何重塑我们构建和交互Web应用的方式。准备好,让我们的想象力随着量子比特一起跳跃。
|
JavaScript 前端开发 API
【前端开发】JS同步与异步调用,Vue2基础知识
本文简要介绍了JavaScript中的同步与异步调用以及Vue2的基础知识。 ### JS同步与异步调用 - **同步调用**:代码按顺序执行,每个任务完成后才执行下一个。 - **异步调用**:允许代码并发执行,不必等待前一个任务完成。 - **回调函数**:传统异步模式,如`setTimeout`。 - **Promise**:解决回调地狱问题,链式调用 `.then()`。 - **async/await**:基于Promise,使异步代码看起来像同步代码。 ### Vue2基础知识 - **核心概念**:指令、实例、组件、模板、数据绑定和生命周期钩子。 - **指令**
571 5
|
存储 编译器 C语言
C语言浮点型详解
C语言浮点型详解
540 0

热门文章

最新文章