DFS:记忆化搜索

​​​​​​​

一、记忆化搜索vs动态规划

. - 力扣(LeetCode)

class Solution {
public://记忆化搜索//1、设置一个备忘录,要确保备忘录初始化的结果不能跟我们实际计算的结果相同//2、添加备忘录,计算的时候,如果备忘录的位置是初始值,进行修改//3、每次计算的时候,去备忘录瞅一瞅,找到的话,就可以不算了int memory[31];int fib(int n) {memset(memory,-1,sizeof(memory));//利用memset进行初始化成-1return dfs(n);}int dfs(int n){//递归进入前,去备忘录瞅瞅if(memory[n]!=-1) return memory[n];if(n==0||n==1) {memory[n]=n;return memory[n];}else {memory[n]=dfs(n-1)+dfs(n-2);return memory[n];}}
};

二、不同路径

class Solution {
public:int uniquePaths(int m, int n){//记忆化搜索vector<vector<int>> memo(m+1,vector<int>(n+1,-1));//建立一个记忆数组return dfs(m,n,memo);//dfs去帮我搜索}int dfs(int i,int j,vector<vector<int>>&memo){if(memo[i][j]!=-1) return memo[i][j];if(i==0||j==0) return 0;if(i==1&&j==1) return 1;memo[i][j]=dfs(i-1,j,memo)+dfs(i,j-1,memo);return memo[i][j];}
};

三、最长的递增子序列

class Solution {
public://记忆化搜索//不用记忆化搜索的话会超时,因为本身就是一个多叉树int lengthOfLIS(vector<int>& nums) {vector<int> memo(nums.size()+1,-1);int ret=1;for(int i=0;i<nums.size();++i){ret=max(dfs(nums,i,memo),ret);} return ret;}int dfs(vector<int>& nums,int pos,vector<int>&memo)//从pos位置开始,以pos位置做起点,往后搜索出他的最长子序列{//接下去开始从下一个位置开始找if(memo[pos]!=-1) return memo[pos];int ret=1;for(int i=pos+1;i<nums.size();++i){if(nums[i]>nums[pos]) //找到了,就更新ret,然后去以下一个位置为起点接着找{ret=max(ret,dfs(nums,i,memo)+1);}}memo[pos]=ret;return memo[pos];}
};

四、猜数字大小II

class Solution {
public:int getMoneyAmount(int n) {vector<vector<int>> memo(n+1,vector<int>(n+1));return dfs(1,n,memo);}int dfs(int left,int right, vector<vector<int>>&memo){if(left>=right) return 0;if(memo[left][right]) return memo[left][right];//去备忘录瞅瞅 int ret=INT_MAX;for(int i=left;i<=right;++i){int l=dfs(left,i-1,memo);//左边的最小int r=dfs(i+1,right,memo);//右边的最小ret=min(ret,max(l,r)+i);}memo[left][right]=ret;return memo[left][right];}
};

五、矩阵的最长递增路径

class Solution {
public:int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int m,n;//记忆化搜索,不然会超时int longestIncreasingPath(vector<vector<int>>& matrix) {int ret=1;m=matrix.size(),n=matrix[0].size();vector<vector<int>> memo(m+1,vector<int>(n+1));for(int i=0;i<m;++i)for(int j=0;j<n;++j){ret=max(ret,dfs(matrix,i,j,memo));//以任意坐标为起点,dfs去帮我们找到最大的路径}return ret;}int dfs(vector<vector<int>>& matrix,int i,int j, vector<vector<int>>&memo){if(memo[i][j]!=0) return memo[i][j];int ret=1;for(int k=0;k<4;++k){int x=i+dx[k],y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&matrix[x][y]>matrix[i][j]) ret=max(dfs(matrix,x,y,memo)+1,ret);}memo[i][j]=ret;//填备忘录return memo[i][j];}
};

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

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

相关文章

数据结构算法题 2(力扣)——链表

1. 分割链表&#xff08;OJ链接&#xff09; 题目描述&#xff1a;给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。 本题做法是&#xff1a;遍历链表将链表分为两部分&#xf…

文旅元宇宙|“元宇宙+”全面赋能智慧文旅场景建设

元宇宙作为下一代互联网入口&#xff0c;正在潜移默化的改变着人生的生活方式&#xff0c;不断催生新业态&#xff0c;带给人们前所未有的体验。元宇宙概念的崛起&#xff0c;正以其独特的魅力&#xff0c;引领着一场全新的智慧文旅革命。元宇宙&#xff0c;这个融合了虚拟现实…

Discord注册教程:Discord刚注册就被封怎么办?附申诉教程!

Discord如今在海外社交媒体平台中迅速崛起&#xff0c;许多社交媒体营销人员也纷纷利用其社群特性进行推广&#xff0c;Discord注册也就成为社媒营销人员必经之路。然而&#xff0c;很多人注册Discord账号时常常会想&#xff1a;“在国内使用Discord会封号吗&#xff1f;”事实…

抖音电商罗盘品牌人群运营策略指南

【干货资料持续更新&#xff0c;以防走丢】 抖音电商罗盘品牌人群运营策略指南 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 品牌人群运营策略&#xff0c;旨在帮助品牌通过精细化运营提…

腾讯云存储面向AIGC全面升级,搭载全面自研存储引擎

云厂商继续为大模型加速落地铺路架桥。 4月8日&#xff0c;腾讯云宣布云存储解决方案面向AIGC场景全面升级&#xff0c;能够针对AI大模型数据采集清洗、训练、推理、数据治理全流程提供全面、高效的云存储支持。数据显示&#xff0c;采用腾讯云AIGC云存储解决方案&#xff0c;…

键值数据库Redis——Windows环境下载安装+命令行基本操作+Java操纵Redis

文章目录 前言一、下载与安装&#xff08;Windows环境&#xff09;** 检查数据库连接状态 **** 查看Redis数据库信息 ** 二、Redis五种数据结构与基本操作获取所有的key——keys *清空所有的key——flushall2.1 字符串操作2.2 散列操作2.3 列表操作2.4 集合操作2.5 位图操作 三…

2_7.Linux中的无人值守安装脚本kickstart

## 一.kickstart自动安装脚本的作用 ## #在企业中安装多台操作系统时面临的问题# 当安装Linux操作系统时&#xff0c;安装过程会需要回答很多关于设定的问题 这些问题必须手动选择&#xff0c;否则无法进行安装 当只安装1台Linux系统&#xff0c;手动选择设定工作量比较轻松 当…

JAVA毕业设计135—基于Java+Springboot+Vue的服装商城(源代码+数据库+万字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的服装商城(源代码数据库万字论文)135 一、系统介绍 本项目前后端分离&#xff0c;分为管理员、用户两种角色 1、用户&#xff1a; 注册、登录、服装购买、…

Axios 使用教程

Axios 是什么? Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 特性 从浏览器创建 XM…

day02php环境和编译器—我耀学IT

一、环境介绍 1、web 环境 使用 PHP 需要先安装环境&#xff0c;安装环境比较麻烦&#xff0c;需要安装Web服务、PHP应用服务器、MySQL管理系统。 Web服务&#xff1a;apache 和 nginx PHP&#xff1a;多版本 MySQL&#xff1a;多版本 2、环境集成包 因为多环境、多版本、多系…

“鲜花换冥币,文明寄哀思“张家口慈善义工联合会清明节活动

又是一年春草绿&#xff0c;梨花风起正清明。扫墓祭祖、缅怀先人是清明节的重要民俗活动&#xff0c;为摒弃传统陋习&#xff0c;树文明祭祀新风&#xff0c;2024年4月4日&#xff0c;张家口慈善义工联合会携手市人民公墓西祥园组织志愿者们开展以“鲜花换冥币&#xff0c;文明…

-bash: cd: /etc/hadoop: 没有那个文件或目录

解决办法&#xff1a;source /etc/profile 运行 source /etc/profile 命令会重新加载 /etc/profile 文件中的配置&#xff0c;这样做的目的是使任何更改立即生效&#xff0c;而不需要注销并重新登录用户。通常&#xff0c;/etc/profile 文件包含系统范围的全局 Shell 配置&…