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

蓝桥杯备考:从记忆化搜索到动态规划

首先我们先来复习一下我们之前学的用记忆化搜索优化的求斐波那契数列

#include <iostream>
#include <cstring>
using namespace std;
const int N = 35;
int f[N];
int dfs(int n)
{
	if(f[n]!=-1) return f[n];
	if(n==1||n==0) return f[n]=n;
	
	return f[n] = dfs(n-1)+dfs(n-2);
 } 
int main()
{
	memset(f,-1,sizeof(f));
	int n;cin >> n;
	cout << dfs(n) << endl;
	
	
	
	return 0;
}

动态规划就是把复杂的问题分解为更小的问题,并存储子问题的解,减少计算。动态规划除了有记忆化搜索,还有递推形式的动态规划 我们先来写一下

#include <iostream>
using namespace std;
const int N = 35;
int f[N];
int main()
{
	int n;cin >> n;
	f[0] = 0,f[1] = 1;
	for(int i =2;i<=n;i++)
	{
		f[i] = f[i-1]+f[i-2];
	}
	cout << f[n] << endl;
	
	
	
	return 0;
}

在递推形式的动态规划里,我们需要理解一下递归形式的动态规划的一些专有名词

1.状态表示,也就是f数组里每一个格子的含义

2.状态转移方程:也就是f数组里每一个格子的推导公式

3.初始化:根据题目的条件先填一些格子

其实递推形式第动态规划的这些名词和记忆化搜索里是能一一对上的

状态表示《-----》递归的含义  都是求第n个斐波那契数

状态转移方程《--------》递归函数的主函数体

初始化 《-------》递归函数的出口

递推形式动态规划步骤

1.确认状态表示  根据经验和递归函数的含义来定,实在不会可以尝试取蒙去试

2.推导状态转移方程

3.初始化

4.确认填表顺序

5.确定最终结果


http://www.kler.cn/a/568495.html

相关文章:

  • 微服务学习(5):消息转换器由JDK序列化——JSON序列化
  • ArcGIS Pro实战技巧:灵活运用线条精准分割与裁切面要素
  • 每日学习Java之一万个为什么?(Maven篇+RPC起步+CICD起步)(待完善)
  • 力扣27.移除元素(双指针)
  • Ubuntu显卡服务器黑屏无响应的维护日志
  • [C#]C#移动文件报错完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符
  • 基于固定点数物理引擎的盒型碰撞器设计与实现分析
  • Qt中的事件模型
  • 【AI绘画】黑白木刻之希腊神话系列(一丹一世界)
  • MYSQL增删改查操作
  • 策略模式环境类的实现方式对比
  • 优博讯,蓝禾,三七互娱,顺丰,oppo,游卡,汤臣倍健,康冠科技,作业帮,高途教育25届春招内推
  • Spring Security 如何防止 CSRF 攻击?
  • Redis数据结构-List列表
  • 10.3 指针进阶_代码分析
  • 自学微信小程序的第七天
  • hive之LEAD 函数详解
  • 【重构小程序】升级JDK1.8、SpringBoot2.x 到JDK17、Springboot 3.x(一)
  • 算法刷题-2025年02月26日
  • JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)