记忆化搜索(递归)讲解
记忆化的本质是:
先记录,后返回(记住:一定要记录,否则就是普通的递归);
如果表中有,则直接返回。
1.斐波那契写法:
1 ,1 ,2 ,3 ,5 ,8 ,13…
//结果 1134903170
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll f[1001];
//原始程序:
//int fac(int n)
//{// if(n==1) return 1;
// else if(n==2) return 2;
// else return fac(n-1)+fac(n-2);
//}
//记忆化:
ll fac(int n)
{ll p;if(n==1 || n==2) return 1;if(f[n]!=-1) return f[n];//查找有,直接返回 p=fac(n-1)+fac(n-2);f[n]=p;//先记录后返回 return p;
}
int main()
{ int m=45; memset(f,-1,sizeof f);cout<<fac(m)<<endl;
}
2.NOIP2001数的计数
我们要求找出具有下列性质数的个数,先输入一个自然数n,然后对此自然数按照如下方法进行处理:
*.不做任何操作
*.在它左边加上一个自然数,但该自然数不能超过原数的一半;
*.加上数后,继续按照此规则进行处理,直到不能再次加入自然数为止。
输入:
8
输出:
10
分析:
输入为8,输入的可能性为:
8
48
38
28
18
248
148
138
128
1248
原代码:
int dfs(int t)
{int p=1;for(int i=1;i<=t/2;i++)p+=dfs(i);return p;
}
改进的代码(记忆化):
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[1001];
int dfs(int t)
{int p=1;if(f[t]!=-1) return f[t]; for(int i=1;i<=t/2;i++)p+=dfs(i);f[t]=p;return p;
}
int main()
{int n;cin>>n;memset(f,-1,sizeof f); cout<<dfs(n)<<endl;}
记忆化搜索(递归)讲解相关推荐
- 记忆化搜索 递归缓存_需要微缓存吗? 营救记忆
记忆化搜索 递归缓存 缓存解决了各种各样的性能问题. 有很多方法可以将缓存集成到我们的应用程序中. 例如,当我们使用Spring时,可以轻松使用@Cacheable支持. 非常简单,但我们仍然必须配置 ...
- 山东省第五届省赛题C Colorful Cupcakes(五维数组+记忆化搜索)
在写题目之前先来介绍一下记忆化搜索. 算法上依然是搜索的流程,但是搜索到的一些解用动态规划那种思想和模式保存.一般来说,动态规划总要遍历所有的状态,而搜索可以排除一些无效的状态.最最最最最主要的是,搜 ...
- 数据结构-记忆化搜索讲解
算法:记忆化搜索算法 一:简述 记忆化搜索实际上是递归来实现的,但是递归的过程中有许多的结果是被反复计算的,这样会大大降低算法的执行效率. 而记忆化搜索是在递归的过程中,将已经计算出来的结果保存起来, ...
- 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...
- P1464 Function(递归式的记忆化搜索)
传送门 题目描述 对于一个递归函数w(a,b,c)w(a,b,c)w(a,b,c) 如果a≤0a≤0orb≤0b≤0orc≤0c≤0a \le 0a≤0 or b \le 0b≤0 or c \le ...
- 数字三角形——递归、递推、记忆化搜索
数字三角形 描述: 有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数. 问题: 从第一行的数开始,每次可以往左 ...
- 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)
题目要求 P1464题目链接 分析 如果--你信了这题干,真的写了递归--TLE警告!!! 所以,就需要优化嘛-- [−9223372036854775808,9223372036854775807] ...
- 递归 dfs 记忆化搜索 动态规划
今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态--这种用自已来 ...
- dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割
记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...
- [每日一题] 128. 青蛙过河(数组、记忆化搜索、递归、剪枝)
文章目录 1. 题目来源 2. 题目说明 3. 题目解析 方法一:哈希表.记忆化搜索.递归解法 方法二:迭代解法 方法三:回溯法+贪心策略+剪枝 1. 题目来源 链接:青蛙过河 来源:LeetCode ...
最新文章
- JS获取当月每天的日期,JS获取本周每天的日期
- 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058
- (转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
- deepin安装java_Deepin安装Eclipse
- leetcodeT14-最长公共前缀(两种解法+图解)
- python Django之Web框架本质 (2)
- zookeeper的安装集群版
- poj1637 Sightseeing tour 混合图欧拉回路判定
- matlab 线性拟合相关系数,Matlab拟合非线性曲线后求相关系数(拟合的优劣)
- webex无法用计算机呼叫,CiscoWebExMeetingsServer疑难解答指引.PDF
- linux系统怎么使用r语言,linux命令行下使用R语言绘图
- 关于springcloud中eureka报错com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException:
- ubuntu中wps字体缺失的解决方法
- 淘宝API 优惠券查询
- 如何写出让同事吐血的代码?
- 用递归法求两个数的最大公约数
- 新川抖音短视频营销平台是怎么样帮助企业运营抖音蓝V号的?
- 2006厦门企业100强名单
- 动态规划-买卖股票的最佳时机 专题
- Springboot+MybatisPlus+layui简易账单管理项目
热门文章
- 计算机网络技术实训报告
- Android Retrofit2 Post请求添加Json类型参数笔记
- win7下绑定IP和MAC地址,提示ARP项添加失败,拒绝访问
- 老玩家的25条总结:这就是坦克世界的真理(转载) 本人觉得该看看
- 使用USBasp给arduino烧写bootloader
- 我的平面设计作品之:公司徽标类
- Hexo博客 Next更换修改主题样式 不生效的解决
- error: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities
- Boot 参数 use_bak_rootfs
- RFID在钢筋仓库管理中的应用