当前位置: 首页 > news >正文

[Algorithm][动态规划][路径问题][不同路径][不同路径Ⅱ][珠宝的最高价值]详细讲解

目录

  • 1.不同路径
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.不同路径 II
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.珠宝的最高价值
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.不同路径

1.题目链接

  • 不同路径

2.算法原理详解

  • 思路
    • 确定状态表示 -> dp[i][j]的含义

      • 走到dp[i][j]的时候,一共有多少种方式
        请添加图片描述
    • 推导状态转移方程

      • dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
    • 初始化:dp表多开一行和一列虚拟结点,避免处理边界

      • dp[0][1] = 1 || dp[1][0] = 1
        请添加图片描述
    • 确定填表顺序:从上往下,从左往右

    • 确定返回值:dp[n][m]

  • 上述如果dp表不多开那一行和一列虚拟结点会怎么样?
    • 需要做边界处理,将第一列和第一行先初始化为1

3.代码实现

int uniquePaths(int n, int m) 
{vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));dp[0][1] = 1;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[n][m];
}

2.不同路径 II

1.题目链接

  • 不同路径 II

2.算法原理详解

  • 思路
    • 确定状态表示 -> dp[i][j]的含义

      • 走到dp[i][j]的时候,一共有多少种方式
        请添加图片描述
    • 推导状态转移方程

      • dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
        请添加图片描述
    • 初始化:dp表多开一行和一列虚拟结点,避免处理边界

      • dp[0][1] = 1 || dp[1][0] = 1
        请添加图片描述
    • 确定填表顺序:从上往下,从左往右

    • 确定返回值:dp[n][m]


3.代码实现

int uniquePathsWithObstacles(vector<vector<int>>& ob) 
{int n = ob.size(), m = ob[0].size();vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));dp[0][1] = 1;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(ob[i - 1][j - 1] == 0) // 注意下表映射关系{dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}}return dp[n][m];
}

3.珠宝的最高价值

1.题目链接

  • 珠宝的最高价值

2.算法原理详解

  • 思路
    • 确定状态表示 -> dp[i][j]的含义

      • 到达dp[i][j]的时候,此时的最大价值
    • 推导状态转移方程

      • dp[i][j] = max(dp[i - 1][j] + dp[i][j - 1]) + g[i][j]
        请添加图片描述
    • 初始化:dp表多开一行和一列虚拟结点,避免处理边界

      • 第一行和第一列全部初始化为0即可
    • 确定填表顺序:从上往下,从左往右

    • 确定返回值:dp[n][m]


3.代码实现

int jewelleryValue(vector<vector<int>>& frame) 
{int n = frame.size(), m = frame[0].size();vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + frame[i - 1][j - 1];}}return dp[n][m];
}
http://www.lryc.cn/news/351158.html

相关文章:

  • ChatGPT移动应用收入在GPT-4o发布后迎来最大涨幅
  • 汉语拼音 如何 转化成粤语拼音 的
  • 本地电子邮件测试工具-MailHog
  • Java18新特性
  • 大象资讯:PostgreSQL 17 Beta 1 发布!
  • Rust:如何在 Windows 的 Linux 子系统(WSL)下安装
  • 工具分享:VsCode注释神器,koro1FileHeader
  • 水面漂浮物生活垃圾识别检测系统
  • 通过python读取并发送二进制文件到串口
  • 前端笔记-day07
  • 【MySQL精通之路】INFORMATION_SCHEMA库-INNODB_METRICS表
  • React Native 之 定义全局状态管理库(九)
  • java线程池实战应用总结
  • 部署 harbor 创建私有项目
  • 在Linux系统中解决Java生成海报文字乱码和缺少字体文件的问题
  • 升级版网创教程wordpress插件自动采集并发布
  • MySQL 视图(1)
  • 在排序数组中查找元素的一个位置和最后一个位置-力扣
  • 系统分析师-案例分析-数据库
  • 【RabbitMQ】使用SpringAMQP的消息队列(Hello Word)和工作队列(Work Queue)
  • 项目集成SkyWalking,基于k8s搭建
  • mysql-差异备份流程
  • 基于动态规划算法的DNA序列比对函数,给出两条序列(v和w)的打分矩阵
  • Tailwind CSS快速入门
  • Postman使用技巧
  • sqli-labs靶场
  • 基于springboot的大创管理系统
  • 常用torch.nn
  • 力扣226.翻转二叉树101.对称二叉树
  • word如何按照原本页面审阅文档