动态规划思想《从入门到放弃》

2023-05-16

动态规划的定义

将原问题拆解成若干子问题 ,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案。

动态规划的一般流程

在这里插入图片描述

例子1:一维空间的动态规划

题目:求斐波那契数列

  • 暴力递归解决
// 使用递归解决
int fibonacci(int i) {
	return i <= 1 : i : fibonacci(i - 1) + fibonacci(i - 2);
}

暴力递归的时间复杂度是指数级,我们需要使用记忆化搜索去解决这个问题

  • 记忆化搜索(动态规划思想)
// 使用动态规划思想 记忆化搜索
int fibonacci(int fib) {
	// 定义一个数组 存储第N项的斐波那契数
    int[] cache = new int[fib + 1];
    // 遍历
    for (int i = 0; i < cache.length; i++) {
        if (fib <= 1) {
            cache[i] = i;
            continue;
        }
        cache[i] = cache[i - 2] + cache[i - 1];
    }
    return cache[fib];
}

复杂的动态规划

复杂的动态规划:

  1. 维度变化了 有可能是二维或三维空间;
  2. 中间可能会有取舍最优子结构

题目2:不同路径
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
在这里插入图片描述
对于上述问题,由于每次只能 向右或向下 走,于是我们可以转变为子问题:
子问题1:对于A如何走到右下角
子问题2:对于B如何走到右下角
所以总共的走法就等于 【A】的子问题的解+【B】的子问题的解

  • 解法一:使用常规的递归解法
// 使用递归的解法
int paths(int m, int n) {
	// 定义一个二维网格
	int[][] table = new int[m][n];
	// 调用递归函数
	return dfs(table, 0, 0);
}
int dfs(int[][] table, int row, int col) {
	// 递归终止条件
	// 1.1 处理边界值
	if (row < 0 || row >= table.length || col < 0 || col >= table[0].length) {
		return 0;
	}
	// 1.2 若走到目的地 则返回1
	if (row == table.length - 1 && col == table[0].length - 1) {
		return 1;
	}
	// 转换成子问题的解
	return dfs(table, row + 1, col) + dfs(table, row, col + 1);
}
  • 解法二:记忆化搜索
/**
	使用动态规划思想解决
	可以发现 每一格的路径数量是由其上一格和左边一格的路径总数决定的
*/
int paths(int m, int n) {
	// 定义一个二维矩阵
	int[][] table = new table[m][n];
	// 先初始化第一行和第一列
	for (int i = 0; i < m; i++) {
		table[m][0] = 1;
	}
	for (int i = 0; i < n; i++) {
		table[0][n] = 1;
	}
	for (int i = 1; i < m; i++) {
		for (int j = 1; j < n; j++) {
			table[i][j] = table[i - 1][j] + table[i][j - 1];
		}
	}
	return table[m - 1][n - 1];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态规划思想《从入门到放弃》 的相关文章

  • Geant4 wsl GUI xming VcXrv 看不见几何体,黑、花屏幕等问题的解决

    困难 xff1a 使用 WSL xff0c 通过 Xming VcXrv wslg 打开的Geant4可视化界面出现花屏或者黑屏看不见几何体 xff0c 无法正常操作 比如下面这样 xff1a 解决 xff1a 尽量使用VcXrv而不是xm
  • 编译ORTP库遇到的问题

    转自 xff1a HD G2UL EVM开发板体验 基于RTP协议的实时流传输实现 单片机 MCU论坛 电子技术论坛 广受欢迎的专业电子论坛 elecfans com 前言 RTP xff08 Real timeTransportProto
  • 嵌入式linux文件系统打包的方法

    1 squashfs 打包方式 xff1a mksquashfs rootfs 输入文件加 rootfs squashfs 输出文件名 comp xz 2 jffs2 打包方式 xff1a mkfs jffs2 o jffs2 img 输出
  • Linux系统中/dev/mtd与/dev/mtdblock的区别

    MTD memory technology device内存技术设备 是用于访问memory设备 xff08 ROM flash xff09 的Linux的子系统 MTD的主要目的是为了使新的memory设备的驱 动更加简单 xff0c 为
  • Linux系统安装wireshark

    wireshark是一个我们用来抓包的好帮手 xff0c 使用它可让我们看到端口数据变化 xff08 tcp http等都可以 xff09 xff0c 如接收 发送甚至是我们每个操作命令如何传递 xff0c 都可以通过wireshark来截
  • A Simple Framework for Contrastive Learning of Visual Representations[论文学习] SimCLR

    We simplify recently proposed contrastive self supervised learning algorithms without requiring specialized architecture
  • 一文读懂机器学习,大数据/自然语言处理/算法全有了...

    From http www cnblogs com subconscious p 4107357 html 作者 xff1a 计算机的潜意识 在本篇文章中 xff0c 我将对机器学习做个概要的介绍 本文的目的是能让即便完全不了解机器学习的人
  • the Contextual Loss论文理解

    Maintaining Natural Image Statistics with the Contextual Loss 2018 https github com roimehrez contextualLoss http cgm te
  • OpenStack octavia 详解

    一 Octavia架构分析 具体架构图请参考 xff1a https docs openstack org octavia latest reference introduction html 组件分析 xff1a Octavia API
  • Squid中的日志出现TCP_CLIENT_REFRESH_MISS的问题排除

    http www php oa com 2008 07 15 tcp client refresh miss html 今天检查Squid发现大量的日志出现TCP CLIENT REFRESH MISS 见到Cacti中的流量 xff0c
  • 三种方法教你如何在 Ubuntu 20 上安装 WoeUSB

    三种方法教你如何在 Ubuntu 20 上安装 WoeUSB 知乎 上次给大家分享开源软件的时候说过 xff0c 我们公司所有的电脑安装都是ubuntu系统 工作中使用的所有软件都是免费开源的项目 今天我们测试兼容性的时候需要一台windo
  • IIC总线的时钟同步和总线仲裁

    IIC简介 xff1a IIC 即Inter Integrated Circuit 集成电路总线 xff09 xff0c 这种总线类型是由飞利浦半导体公司在八十年代初设计出来的 xff0c 主要是用来连接整体电路 ICS xff0c IIC
  • ubuntu中如何使用中文输入法

    今天我的一个小朋友问我 xff0c 如何在ubuntu中使用中文 xff0c 对于一个初入门的人来说 xff0c 这确实是一个好的问题 xff0c 我看了一下我的系统 xff0c 竟然也不能输入中文哎 我也老搞一下 首先 xff0c 要先下
  • MySQL查看配置文件my.ini或my.conf路径

    查看配置文件my ini或my conf路径 select 64 64 basedir 查看文件存储路径 select 64 64 datadir
  • linux安装软件报错:有未能满足的依赖关系

    一 问题描述 解决了上一个问题 另外一个进程已经为 dpkg 状态数据库 加锁 又一个问题接踵而来 xff08 真是深得命运宠爱呀 xff09 二 问题分析 很明显 xff0c 这不是重启能解决的问题了 xff0c 继续向命运抗争吧 1 依
  • 用Bootstrap写一份简历

    以前学习Bootstrap时练手用的 分享给大家 注意Bootstrap相关文件的路径 xff0c Bootstrap依赖jQuery xff0c 需要先加载jQuery Github代码链接 xff1a 链接 如果有点小用 xff0c 求
  • Linux创建新环境

    Linux的环境操作 1 下载anaconda2 conda导出环境3 conda创建新环境4 pip创建和导出新环境5 pytorch版本安装6 通过通道安装cpython7 通过SCP指定对方端口传输文件8 释放服务器中的缓存 1 下载
  • 【树莓派】树莓派开放WiFi热点

    树莓派4B上创建WiFi热点 xff08 真实可用 xff09 第一步 xff1a 给树梅派4B刷写系统 xff0c 我用的是目前最新的官方系统 xff0c 镜像名称为2021 01 11 raspios buster armhf img
  • Python爬虫攻略(1)>使用Requests获取LOL游戏攻略

    申明 xff1a 本文对爬取的数据仅做学习使用 xff0c 不涉及任何商业活动 xff0c 侵删 Python爬虫教程 gt 1 使用Requests获取LOL游戏攻略 前戏 如果你想先了解一下什么是爬虫 建议看一下这篇文章 学习爬虫前你需
  • Linux下gitee的使用—— 一看就懂得操作

    在做基于ds18b20温度监控的项目开始时 xff0c 就一直在使用git仓库 xff0c 一直没有写过博客 xff0c 基于今天家里没事 xff0c 刚好可以写一下git版本控制的使用 xff01 废话不多说 xff0c 上教程 xff0

随机推荐

  • 文献阅读2:Deep Video Super-Resolution Network

    Deep Video Super Resolution Network Using Dynamic Upsampling Filters Without Explicit Motion Compensation 隐式运动补偿的动态上采样滤波
  • 形参和实参

    形参和实参的区别 形参出现在函数定义中 xff0c 在整个函数体内都可以使用 xff0c 离开该函数则不能使用 实参出现在主调函数中 xff0c 进入被调函数后 xff0c 实参变量也不能使用 形参和实参的功能是作数据传送 发生函数调用时
  • centos 连接windows远程桌面方法

    目录 1 下载并安装软件nux dextop release rpm 2 安装rdesktop软件 3 远程windows桌面 4 rdesktop退出全屏模式 1 下载并安装软件nux dextop release rpm wget ht
  • Winpcap教程(高级应用)

    循序渐进学习使用WINPCAP xff08 五 xff09 WinPcap或libpca最强大的特点之一就是数据流的过滤引擎 它提供一种高效的方法来只捕获网络数据流的某些数据而且常常和系统的捕获机制相集成 过滤数据的函数是pcap comp
  • linux/ubuntu取消sudo输入密码的办法

    Linux Ubuntu sudo不用输入密码的方法 通常我们并不以root身份登录 xff0c 但是当我们执行某些命令 command 时需要用到root权限 xff0c 我们通常都是用 34 sudo command 34 来执行com
  • verilog通过中+:与-:解决变量内固定长度数据位的动态选取

    在FPGA设计过程 xff0c 尤其是算法实现时hi xff0c 有时往往需要选取某个变量的动态范围地址 xff0c 而verilog中常规的向量标识方法a MSB LSB 往往会发生错误 xff0c 在此可借用a BASE WIDTH 的
  • IDEA配置Hadoop插件

    一 安装插件 1 1搜索的方式安装 xff1a setting中找到plugins插件 xff0c 然后搜索big Data 如下图 xff1a 如果找不到可以修改几个配置试一下 xff1a 如果还是不行 xff0c 你可以在cmd里面 p
  • linux的进程突然没有了

    这几天在linux服务器上跑实验 xff0c 进程占用的空间比较大 xff0c 而且占用的时间也比较长 xff0c 有时候会发现进程突然没有了 这个时候去翻了翻系统的内核日志 xff0c var log 路径下会有一个kern log的日志
  • IDEA建hadoop项目

    一 新建项目project 选择maven xff1b 填写maven的坐标 xff0c groupId xff0c artifactId xff0c 以及 version xff0c 其中groupId是公司域名的反写 xff0c 而ar
  • OpenWRT路由器-中继模式下无线接入

    本文主要介绍刷入了OpenWRT系统的路由器如何作为二级路由器 xff0c 通过wifi接入上一级路由以及发出wifi供本局域网下的设备连接 二级路由器可以增强现有的信号 现在的路由器一般都是双频路由器 xff0c 双频路由器往往是两块网卡
  • XSS(Reflected) 反射型跨站攻击

    今天我学习一下反射型XSS 打开DVWA网站 xff0c 先切换到low级别 xff0c 选择XSS xff08 Reflected xff09 先查看其源代码 xff1a lt php header 34 X XSS Protection
  • Notepad++离线安装NppFTP

    文章目录 第一步 下载第二步 安装第三步 重启Notepad 43 43 后即可使用 第一步 下载 下载地址 xff1a https github com ashkulz NppFTP releases 选择对应版本解压 xff0c x86
  • nested exception is com.microsoft.sqlserver.jdbc.SQLServerException

    今天在写一个数据库语句的时候 xff0c 出现了一个错误 xff0c 话不多说 xff0c 上图 nested exception is com microsoft sqlserver jdbc SQLServerException 仅当使
  • 一文搞懂SpringSecurity,spring-security配置文件详解,史上最全

    一 认证和授权概念 1 在生产环境下我们如果不登录系统是否能对业务进行操作 xff1f 答案显然是否定的 xff0c 要操作这些功能必须首先登录到系统才可以 2 是不是所有用户 xff0c 只要登录成功就都可以操作所有功能呢 xff1f 答
  • map.computeIfAbsent() 详解

    computeIfAbsent 1 首先会判断map中是否有对应的Key xff1b 2 1 如果没有对应的Key xff0c 则会创建一个满足Value类型的数据结构放到Value的位置中 xff1b 2 2 如果有对应的Key xff0
  • SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能

    Spring Security 一 简介 Spring Security是Spring家族中的一个安全管理框架 xff0c 一般Web应用都需要 认证 和 授权 认证 xff1a 验证当前访问系统的是不是本系统的用户 xff0c 并且要确认
  • Java一维数组与二维数组的转换

    准备 现有一个一维数组 xff1a 1 2 3 4 5 6 7 8 9 转为 3 3 的二维数组 xff1a 1 2 3 4 5 6 7 8 9 我们不难看出 xff1a 一维数组第1个元素在数组中为 arr 0 0 一维数组第3个元素在数
  • 采用JSP+Servlet+JDBC完成的一个产品信息管理系统

    项目架构 项目整体采用 xff1a Maven 43 Servlet 43 JSP 43 JDBC 43 bootstrap 43 javascript完成 数据库表设计 t manager 管理员ID 用户名 密码 manager id
  • Python并发学习

    Python并发 1 多进程 和多线程的方式类似 2 多线程 2种编写方式 2 1 submit方式2 2 map方式 3 异步 xff08 协程 xff09 3 1 调用方式3 1 1 在协程函数里去调用协程3 1 2 在非协程函数里去调
  • 动态规划思想《从入门到放弃》

    动态规划的定义 将原问题拆解成若干子问题 xff0c 同时保存子问题的答案 xff0c 使得每个子问题只求解一次 xff0c 最终获得原问题的答案 动态规划的一般流程 例子1 xff1a 一维空间的动态规划 题目 xff1a 求斐波那契数列