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

企业靠网站接单/自动交换友情链接

企业靠网站接单,自动交换友情链接,做网站用个人还是企业比较好,个人网页设计作品纯html目录 0.动态规划问题 一.不同路径 1.题目描述 2.问题分析 3.代码实现 二.不同路径 II 1.题目描述 2.问题分析 3.代码实现 三.机器人双向走路 1.题目描述 2.问题分析 3.代码实现 0.动态规划问题 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问…

目录

0.动态规划问题

一.不同路径

1.题目描述

2.问题分析

3.代码实现

二.不同路径 II

1.题目描述

2.问题分析

3.代码实现

三.机器人双向走路

1.题目描述

2.问题分析

3.代码实现


0.动态规划问题

动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题,进行解决,从而一步步获取最优解的处理算法

动态规划对于解决最优子结构啊和重叠子问题等问题时候,有着很好的应用

对于动态规划问题,大致可以分为以下几步:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

一.不同路径

1.题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

力扣:力扣

2.问题分析

1.确定dp数组(dp table)以及下标的含义

dp[i][j]:机器人走到(i,j)网格的位置有dp[i][j]种方法

2.确定递推公式

因为机器人每次只能向下或者向右移动,所以机器人到达(i,j)的位置只存在两种情况

第一种:从上边的格子走过来,一共有dp[i-1][j]种情况

第二种:从左边的格子走过来,一种有dp[i][j-1]种情况

所以dp[i][j]=dp[i-1][j]+dp[i][j-1]

3.dp数组如何初始化

由递推公式可以看出来,至少初始化第一行和第一列,因为机器人只能左走和下走,所以第一行和第一列只可能有一种情况到达(一直左走或者一直向下走)

4.确定遍历顺序

由递推公式可以看出来,从左到右,从上到下

5.举例推导dp数组

对m = 3, n = 7进行推导

[1, 1, 1, 1, 1, 1, 1]
[1, 2, 3, 4, 5, 6, 7]
[1, 3, 6, 10, 15, 21, 28]

3.代码实现

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

二.不同路径 II

1.题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 10 来表示。

力扣:力扣

2.问题分析

这一题与上一题的区别就是多了障碍,有障碍的地方右走是无法到达的,但是可以从上方到达(不是第一行),知道这个易解

1.确定dp数组(dp table)以及下标的含义

dp[i][j]:机器人走到(i,j)网格的位置有dp[i][j]种方法

2.确定递推公式

因为机器人每次只能向下或者向右移动,所以机器人到达(i,j)的位置(左方不存在任何障碍)只存在两种情况

第一种:从上边的格子走过来,一共有dp[i-1][j]种情况

第二种:从左边的格子走过来,一种有dp[i][j-1]种情况

所以dp[i][j]=dp[i-1][j]+dp[i][j-1]

左方一格存在障碍的时候,只能从上方到来(默认障碍位置到达的方法dp[i][j]为0即可)

3.dp数组如何初始化

由递推公式可以看出来,至少初始化第一行和第一列,当右方存在障碍,第一行和第一列只可能有一种情况到达,当上方或者左方存在障碍的时候,障碍之后的路没有情况可以到达

        for (int i = 0; i < m && obstacleGrid[i][0] == 0; ++i) {dp[i][0] = 1;}for (int i = 0; i < n && obstacleGrid[0][i] == 0; ++i) {dp[0][i] = 1;}

4.确定遍历顺序

由递推公式可以看出来,从左到右,从上到下

5.举例推导dp数组

对obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]进行推导

[1, 1, 1]
[1, 0, 1]
[1, 1, 2]

3.代码实现

    public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length;int n = obstacleGrid[0].length;int[][] dp = new int[m][n];if(obstacleGrid[0][0] == 1)return 0;for (int i = 0; i < m && obstacleGrid[i][0] == 0; ++i) {dp[i][0] = 1;}for (int i = 0; i < n && obstacleGrid[0][i] == 0; ++i) {dp[0][i] = 1;}for (int i = 1; i < m; ++i) {for (int j = 1; j < n; ++j) {if (obstacleGrid[i][j] == 0)dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m-1][n-1];}

三.机器人双向走路

1.题目描述

假设有排成一行的N个位置,记为1~N,(N>=2),开始时机器人在start位置,有如下约束

  • 机器人在1位置,下一步只能走到2位置
  • 机器人在N位置,下一步只能走到N-1位置
  • 机器人在其他位置,下一步能走左边,也能走右边
    求机器人从start位置经过k步到达target位置的方法数。

2.问题分析

这一题从二维变成了一维,显然是增加了难度的,因为可能存在在一个位置上来回移动的情况,所以dp数组和前几题有明显的的不一样,采用从后到前的推导方式,从target位置推导到start位置

1.确定dp数组(dp table)以及下标的含义

dp[i][j]的含义:机器人剩余j步,在i位置走到target位置可以有dp[i][j]中方法数

2.确定递推公式

因为机器人只能向左或是向右移动,所以dp[i][j]可以有两种方式推导出来

从左格移动到i位置:dp[i][j]=dp[i-1][j-1];

从右格移动到i位置:dp[i][j]=dp[i+1][j-1];

所以递推公式为:dp[i][j]=dp[i-1][j-1]+dp[i+1][j-1]

但是存在两种特殊情况,当机器人位于1位置的时候,只能向右移动到2位置

当机器人位于n位置的时候,只能向左移动到n-1位置

                if (i == 1) {dp[i][j] = dp[2][j - 1];} else if (i == n) {dp[i][j] = dp[n - 1][j - 1];} else {dp[i][j] = dp[i + 1][j - 1] + dp[i - 1][j - 1];}

3.dp数组如何初始化

当机器人剩余0步的时候,已经在target位置的时候,这种情况下到达dp显然是1中情况

4.确定遍历顺序

由下图可以看出,遍历顺序应该先从左到右,然后从上到下进行遍历,也就是j(剩余的步数)在外层循环,i(机器人目前的位置)在内存循环

5.举例推导dp数组

对n=5,steps=3,start=2,target=3进行推导

[0, 1, 0, 2]
[1, 0, 2, 0]
[0, 1, 0, 3]
[0, 0, 1, 0]
[0, 0, 0, 1]

也就是这三种情况

1).2->1,1->2,2->3 
2).2->3,3->2,2->3 
3).2->3,3->4,4->3

3.代码实现

  public int move(int n, int steps, int start, int target) {int[][] dp = new int[n + 1][steps + 1];//剩余的步数为0,当前位置为target时dp[target][0] = 1;for (int j = 1; j <= steps; ++j) {for (int i = 1; i <= n; ++i) {if (i == 1) {dp[i][j] = dp[2][j - 1];} else if (i == n) {dp[i][j] = dp[n - 1][j - 1];} else {dp[i][j] = dp[i + 1][j - 1] + dp[i - 1][j - 1];}}}return dp[start][steps];}

回溯代码

   /*** @param n      能够到达位置的最大值(1--n位置移动)* @param steps  剩余需要移动的步数* @param start  当前开始所处的位置* @param target 需要到达的目标位置* @return 一共到达目标位置的方法数*/public int move(int n, int steps, int start, int target) {if (steps == 0) {if (start == target) {return 1;} elsereturn 0;} else if (start == 1) {return move(n, steps - 1, 2, target);} else if (start == n) {return move(n, steps - 1, n - 1, target);} else {return move(n, steps - 1,start + 1, target) + move(n, steps - 1, start - 1, target);}}

相关文章:

Java之动态规划之机器人移动

目录 0.动态规划问题 一.不同路径 1.题目描述 2.问题分析 3.代码实现 二.不同路径 II 1.题目描述 2.问题分析 3.代码实现 三.机器人双向走路 1.题目描述 2.问题分析 3.代码实现 0.动态规划问题 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问…...

seata源码-全局事务提交 服务端源码

前面的博客中&#xff0c;我们介绍了&#xff0c;发起全局事务时&#xff0c;是如何进行全局事务提交的&#xff0c;这篇博客&#xff0c;主要记录&#xff0c;在seata分布式事务中&#xff0c;全局事务提交的时候&#xff0c;服务端是如何进行处理的 发起全局事务提交操作 事…...

C++ 模板

文章目录一、泛型编程二、 函数模板三、类模板一、泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;代码复用的一种方法 在 C 中&#xff0c;我们可以通过函数重载实现通用的交换函数 Swap &#xff0c;但是有一些缺点 重载函数只有类型不同&#xff0c;…...

JWT安全漏洞以及常见攻击方式

前言 随着web应用的日渐复杂化&#xff0c;某些场景下&#xff0c;仅使用Cookie、Session等常见的身份鉴别方式无法满足业务的需要&#xff0c;JWT也就应运而生&#xff0c;JWT可以有效的解决分布式场景下的身份鉴别问题&#xff0c;并且会规避掉一些安全问题&#xff0c;如CO…...

华为OD机试题 - 最小施肥机能效(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

Python(1)变量的命名规则

目录 1.变量的命名原则 3.内置函数尽量不要做变量 4.删除变量和垃圾回收机制 5.结语 参考资料 1.变量的命名原则 ①由英文字母、_(下划线)、或中文开头 ②变量名称只能由英文字母、数字、下画线或中文字所组成。 ③英文字母大小写不相同 实例&#xff1a; 爱_aiA1 print(…...

Shiro1.9学习笔记

文章目录一、Shiro概述1、Shiro简介1.1 介绍1.2 Shiro特点2、Shiro与SpringSecurity的对比3、Shiro基本功能4、Shiro原理4.1 Shiro 架构(外部)4.2 shiro架构(内部)二、Shiro基本使用1、环境准备2、登录认证2.1 登录认证概念2.2 登录认证基本流程2.3 登录认证实例2.4 身份认证源…...

2.5|iot|嵌入式Linux系统开发与应用|第4章:Linux外壳shell脚本程序编程

1.shell基础 Shell是Linux操作系统内核的外壳&#xff0c;它为用户提供使用操作系统的命令接口。 用户在提示符下输入的每个命令都由shell先解释然后发给Linux内核&#xff0c;所以Linux中的命令通称为shell命令。 通常我们使用shell来使用Linux操作系统。Linux系统的shell是…...

九龙证券|连续七周获加仓,四大行业成“香饽饽”!

本周17个申万职业北上资金持股量环比增加。 北上资金抢筹铝业龙头 本周A股商场全体冲高回落&#xff0c;沪指收跌1.12%&#xff0c;深成指跌2.18%&#xff0c;创业板指跌3.76%。北上资金周内小幅净流入。在大盘体现较差的周四周五&#xff0c;北上资金别离逆市回流67.94亿元、…...

210天从外包踏进华为跳动那一刻,我泪目了

前言 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2021年4月&#xff0c;我有幸成为了华为的一名高级测试工程师&#xff0c;正如标题所…...

CMake 引入第三方库

CMake 引入第三方库 在 CMake 中&#xff0c;如何引入第三方库是一个常见的问题。在本文中&#xff0c;我们将介绍 CMake 中引入第三方库的不同方法&#xff0c;以及它们的优缺点。 1. 使用 find_package 命令 在 CMake 中&#xff0c;使用 find_package 命令是最简单和最常…...

软考中级-面向对象

面向对象基础&#xff08;1&#xff09;类类分为三种&#xff1a;实体类&#xff08;世间万物&#xff09;、接口类&#xff08;又称边界类&#xff0c;提供用户与系统交互的方式&#xff09;、控制类&#xff08;前两类之间的媒介&#xff09;。对象&#xff1a;由对象名数据&…...

Linux 系统构成:bootloader、kernel、rootfs

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录前言bootloaderk…...

SpringCloud - Eureka注册发现

目录 提供者与消费者 Eureka原理分析 搭建Eureka服务 服务注册 服务发现 提供者与消费者 服务提供者&#xff1a; 一次业务中&#xff0c;被其它微服务调用的服务(提供接口给其它微服务)服务消费者&#xff1a; 一次业务中&#xff0c;调用其它微服务的服务(调用其它微服务…...

WampServer安装教程

文章目录简介&#xff1a;官网地址安装步骤&#xff1a;我是阿波&#xff0c;学习PHP记录一下笔记&#xff0c;如果对你有帮助&#xff0c;欢迎一键三连&#xff0c;谢谢&#xff01; 简介&#xff1a; WampServer是一个用于Windows操作系统的Web开发环境&#xff0c;其名称来…...

Go语言泛型基础

泛型 Go 并不是一种静止的、一成不变的编程语言。新的功能是在经过大量的讨论和实验后慢慢采用的。最初的 Go1.0发布以来&#xff0c;Go语言习惯的模式已经发生了重大变化1.7的context、1.11的modules、1.13 error嵌套等Go的 1.18 版本包括了类型参数的实现&#xff0c;也就是…...

基于android的中医养生app

需求信息&#xff1a; 中医健康养生APP分为四大模块&#xff0c;其中个人中心又分为4大块&#xff0c;游客用户个人中心是空白的。 上图为养生知识推广普及模块的功能结构图。 在养生知识推广普及模块界面&#xff0c;用户可以选择自己感兴趣的模块进行文章浏览&#xff0c;文章…...

2023美赛C代码思路结果【全部更新完毕】注释详尽

C题已完成全部代码&#xff0c;注释详尽&#xff0c;并增加扰动项&#xff0c;保证大家的结果不会撞 需要全部问题的可以点击&#xff1a;https://www.jdmm.cc/file/2708697/ 下面贴出核心代码&#xff1a; -- coding: utf-8 -- TODO: 入口函数 import numpy as np from…...

实现8086虚拟机(二)——模拟CPU和内存

文章目录CPU 架构EU&#xff08;执行单元&#xff09;BIU&#xff08;总线接口单元&#xff09;小结一下模拟内存模拟 BIU模拟 EU模拟 CPU总结要模拟 8086 CPU 运行&#xff0c;必须知道 CPU 的一些知识。下文的知识点都来自《Intel_8086_Family_Users_Manual 》。CPU 架构 微…...

Windows7下使用VMware11.1.1安装ubuntu-16.04.7

一、说明二、安装说明三、安装步骤详解1、先安装VMware软件2、创建虚拟机3、编辑虚拟机4、开启虚拟机&#xff0c;初始化Linux系统一、说明 虽然VMware和ubuntu最新版已经很高了&#xff0c;我这电脑由于是win7配值还低&#xff0c;所以采用低版本来安装 VMware版本&#xff1…...

基于SSM框架的CMS内容管理系统的设计与实现

基于SSM框架的CMS内容管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目…...

华为OD机试 - 运动会 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】 华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】 华为OD机试 - 删除最少字符(Python) | 机试题算法思路 【2023-02】 华为OD机试 - Excel 单元格数值统计(Python) | 机试题算法思路 …...

(C语言篇)扫雷的实现

文章目录 一、开始时的基本思维&#xff1a;二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…...

华为手表开发:WATCH 3 Pro(8)获取位置服务

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;8&#xff09;获取位置服务初环境与设备文件夹&#xff1a;文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包&#xff1a;system.router首页效果点击结果按钮跳转后…...

AnLogicFPGA设计的时序约束及时序收敛

本篇博文讲了三个内容&#xff1a;时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立&#xff08;setup&#xff09;时间和保持&#xff08;hold&#xff09;时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…...

ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)

问题描述 想在ubuntu22.10系统上安装sogou中文输入法&#xff0c;按照sogou输入法网站给出的步骤安装后&#xff0c;发现无法输入中文字符&#xff0c;但是可以输入中文标点符号。 sogou网站&#xff1a;https://shurufa.sogou.com/linux/guide 寻找答案1 通过各种百度和必…...

基于微信小程序的生活日用品交易平台 的设计与实现

基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一…...

15:高级篇 - CTK 事件与监听

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 生命周期层事件 在 Plugin 生命周期的不同状态相互转换时,CTK Plugin Framework 会发出各种不同的事件,以供事先注册好的事件监听器处理,这些事件被称为“生命周期层事件”。CTK Plugin Framework 支持的…...

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程&#xff1a;6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…...