【算法——动态规划(从dfs回溯开始推导dp)】

基础理论

递归:

递:大问题分解子问题的过程  ; 归:产生答案 

dp:只进行归;用已知的最底层的(递归的边界,搜索树的底),推出未知

《视频索引》

一句话:

dp数组(不一定是数组,也可以是有限数间的来回递推)

递推关系:dfs向下递归的公式

dp数组初始化:递归的边界

动态规划题目的基础就是:回溯——记忆化——dp(一层比一层效率高)

例:

例题

打家劫舍

#include<iostream>
using namespace std;
#include<vector>vector<int>nums = { 10,11,7,12 };vector<int>memo(100, -1);int dfs(int index)    //暴力
{if (index >= nums.size()) return 0;return max( dfs(index + 2) + nums[index], dfs(index + 1) );  //这两个dfs分别代表选和不选,两种情况下的max
}int mem(int index)   //记忆化
{if (memo[index] != -1) return memo[index];   //这个数下面的最大值我们已经记录了,直接返回即可if (index >= nums.size()) return 0;return memo[index]= max(mem(index + 2) + nums[index], mem(index + 1));  //记录当前下面子树最大值
}int main()
{cout << "暴力:"<< dfs(0) << endl << "记忆化:" << mem(0) << endl;vector<int>dp(nums.size(), 0);  //dp.1          dp[i]就是当前房屋的maxdp[0] = nums[0]; dp[1] = max(nums[0],nums[1]);for (int i = 2; i < nums.size(); i++)dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);  //画图,一定要画图,用: 10 11 7 12等试试看,会很通透int a = nums[0], b = max(nums[0], nums[1]), c = 0;    //dp.2for (int i = 2; i < nums.size(); i++)    {c = max(a + nums[i], b);a = b;b = c;}cout << "dp1:" << dp[nums.size() - 1] << endl;cout << "dp2:" << b << endl;return 0;
}

爬楼梯(斐波那契)

递推草稿&视频:动态规划(dp)入门 | 这tm才是入门动态规划的正确方式! | dfs记忆化搜索 | 全体起立!!_哔哩哔哩_bilibili

#include<iostream>
using namespace std;
#include<vector>
#include<chrono>vector<int>memo(100, -1);
int mem(int index)      //记忆化(剪枝)
{if (memo[index] != -1) return memo[index]; if (index == 1) return 1;if (index == 2) return 2;memo[index] = mem(index - 1) + mem(index - 2);return memo[index];
}int dfs(int index)  //暴力
{if (index == 1) return 1;if (index == 2) return 2;return dfs(index - 1) + dfs(index - 2);
}int time(int(*k)(int),int n)  //用时测试函数
{auto start = std::chrono::steady_clock::now();k(n);auto end = std::chrono::steady_clock::now();return std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
}int main()
{int n; cin >> n;cout << dfs(n) << endl << mem(n) << endl;memo.clear();  memo.resize(100,-1);cout <<"暴力用时:"<< time(dfs, n) << "   " <<"记忆化用时:" << time(mem, n) << endl;vector<int>dp(n, 0);  //dp   当然也可以用三个变量来互相推dp[0] = 1, dp[1] = 2;for (int i = 2; i < n; i++)dp[i] = dp[i - 1] + dp[i - 2];cout << dp[n - 1] << endl;return 0;
}

数字三角形

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

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

相关文章

TDengine数据迁移

前言 taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份&#xff0c;也可以对数据库、超级 表和普通表中指定时间段内的数据记录…

蓝牙BLE上位机工具开发理论线索梳理_5.Windows WinRT API包Microsoft.Windows.SDK.Contracts

1. WinRT API包介绍 本文介绍下Windows WinRT API包&#xff08;Microsoft.Windows.SDK.Contracts&#xff09;&#xff0c; 如图1是SDK包的描述。 图1 Microsoft.Windows.SDK.Contracts Windows WinRT API包使您能够将最新的Windows运行时API支持添加到您的。net Framework 4.…

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果(地图探测、地图窥探)

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果&#xff08;地图探测、地图窥探&#xff09; 实现原理 ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类&#xff0c;可以添加数据以及操作 FBO&#xff08;ManagedFBO&#xff09;&#xf…

媲美Sora,免费使用!带物理模拟的,文生视频模型

6月13日&#xff0c;知名3D建模平台Luma AI发布最新文生视频模型Dream Machine&#xff0c;向所有用户免费开放使用。 Dream Machine除了支持文本之外&#xff0c;还可使用图片作为引导来生成视频&#xff0c;其生成的视频质量、动作一致性、色彩、光影、饱和度、运镜等方面&a…

Mysql学习笔记-进阶篇

一、存储引擎 1、MYSQL体系结构 连接层、服务层、引擎层、存储层&#xff1b; 2、存储引擎简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的&#xff0c;而不是库的&#xff0c;所以存储引擎也可被称为表类型。 1&#xff09;在创…

golang闭包

【1】什么是闭包&#xff1a; 闭包就是一个函数和与其相关的引用环境组合的一个整体 【2】案例展示&#xff1a; package main import "fmt" //函数功能&#xff1a;求和 //函数的名字&#xff1a;getSum 参数为空 //getSum函数返回值为一个函数&#xff0c;这个函…

[工具探索]英寸vs毫米下常见尺寸排版

文章目录 常见尺寸1. 照片尺寸2. 纸张尺寸3. 显示器和电视屏幕尺寸4. 手机屏幕尺寸5. 笔记本电脑屏幕尺寸6. 其他设备尺寸 换算公式换算方法常见照片尺寸对比表国际标准ISO&#xff08;216&#xff09;纸张尺寸 什么是英寸&#xff1f; 英寸&#xff08;英语&#xff1a;inch&a…

Hutool有哪些常用方法

Hutool是一个Java工具类库&#xff0c;它提供了很多方便的方法来简化Java开发。以下是一些Hutool的常用方法及其示例&#xff1a; 一、日期时间处理 DateUtil.format(Date date, String pattern): 格式化日期。 // 代码如下 Date date new Date(); String format DateUtil…

计算机组成原理 期末复习笔记整理(上)(个人复习笔记/侵删/有不足之处欢迎斧正)

零、计算机的发展 冯.诺依曼计算机的特点: 1.计算机由五大部件组成 2.指令和数据以同等地位存于存储器&#xff0c;可按地址寻访 3.指令和数据用二进制表示 4.指令由操作码和地址码组成 5.存储程序&#xff08;首次提出存储结构&#xff09; 6.以运算器为中心&#xff08;现代…

水泥行业超低排放简介

在当今社会&#xff0c;随着环保意识的不断提高&#xff0c;水泥行业作为重要的工业领域&#xff0c;其超低排放的实施范围及成效日益受到人们的关注。朗观视觉小编将从多个角度探讨水泥行业超低排放的实施范围&#xff0c;分析其背后的意义与影响&#xff0c;展望未来的发展趋…

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版?

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版&#xff1f; 书接上文&#xff1a; ONLYOFFICE 协作空间服务器如何一键安装自托管私有化部署 讲的是如何把ONLYOFFICE协作空间服务器部署到自托管云服务器VPS上面&#xff0c;这里继续&#xff0c;在自己Windows电…

c++ 智能指针使用注意事项及解决方案

c11智能指针 shared_ptr介绍注意事项示例解决方案 weak_ptr特点示例 unique_ptr特点示例 shared_ptr 介绍 shared_ptr 是一种智能指针&#xff0c;用于自动管理动态分配的对象的生命周期。它通过引用计数机制来确保当最后一个 shared_ptr 指向一个对象时&#xff0c;该对象会…

【C++ | 移动构造函数】一文了解C++11的 移动构造函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-12 2…

[深度学习]使用python转换pt并部署yolov10的tensorrt模型封装成类几句完成目标检测加速任务

【简单介绍】 使用Python将YOLOv10模型从PyTorch格式&#xff08;.pt&#xff09;转换为TensorRT格式&#xff0c;并通过封装成类来实现目标检测加速任务&#xff0c;是一个高效且实用的流程。以下是该过程的简要介绍&#xff1a; 模型转换&#xff1a; 利用官方提供导出命令…

浅谈网络通信(2)

文章目录 一、TCP1.1、TCP提供的api —— ServerSocket 、Socket1.2、使用TCP协议编写回显服务器1.3、长/短连接 二、应用层协议、传输层协议详解2.1、应用层(后端开发必知必会)2.1.1、自定义应用层协议2.1.2、通用的协议格式2.1.2.1、XML2.1.2.2、json2.1.2.3、protobuffer 2.…

Protected and unprotected Meilisearch projects(/health)

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

02通讯录管理系统——创建项目

创建项目步骤如下&#xff1a; 1.创建新项目 2.添加文件 2.1创建项目 打开vs2019后&#xff0c;点击创建新项目&#xff0c;创建新的C项目 填写项目名称&#xff0c;选择路径 2.2添加文件 添加成功后&#xff0c;效果如图

Jira的原理及应用详解(六)

本系列文章简介&#xff1a; 在当今快速发展的软件开发和项目管理领域&#xff0c;有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具&#xff0c;以其强大的功能、灵活的定制性以及卓越的用户体验&#xff0c;赢得了全球众多…

【QT5】<知识点> QT串口编程

目录 前言 一、串口编程步骤 0. 添加串口模块 1. 自动搜索已连接的串口 2. 创建串口对象 3. 初始化串口 4. 打开串口 5. 关闭串口 6. 发送数据 7. 接收数据 二、简易串口助手 1. 实现效果 2. 程序源码 3. 实现效果二 前言 本篇记录QT串口编程相关内容&#xff0…

iText7画发票PDF——小tips

itext7教程&#xff1a; 1、https://blog.csdn.net/allway2/article/details/124295097 2、https://max.book118.com/html/2017/0720/123235195.shtm 3、https://www.cnblogs.com/fonks/p/15090635.html 4、https://www.cnblogs.com/sky-chen/p/13026203.html 5、官方&#xff…