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

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

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

#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.确定最终结果

相关文章:

  • 深入解析 Spring WebFlux:原理与应用
  • 链表OJ(十二)23. 合并 K 个升序链表 困难 优先级队列中存放指针结点
  • 什么是预训练语言模型下游任务?
  • 16.3 LangChain Runnable 协议精要:构建高效大模型应用的核心基石
  • LeetCode 27 移除元素
  • Linux(centOS) 命令提示符格式修改(PS1)
  • 数据结构(初阶)(七)----树和二叉树(堆,堆排序)
  • linux基础知识
  • RFID工具柜DW-G104R|智能存储,便捷高效
  • 解决git add . + git commit之后文件状态还是M 问题
  • java后端开发day25--阶段项目(二)
  • 《今日AI-编程-人工智能日报》
  • 130. 被围绕的区域(BFS)
  • 如何利用SpringSecurity进行认证与授权
  • 【数据结构】LRUCache|并查集
  • 计算机毕业设计SpringBoot+Vue.js健身房管理系统(源码+文档+PPT+讲解)
  • AbMole揭秘伤口愈合:IGF-1-SP1-CD248信号通路的新发现
  • Java并发编程之ConcurrentHashMap的原理和使用
  • Windows 11【1001问】查看Windows是否激活的11种方法
  • Java8面试
  • 林诗栋/蒯曼不敌日本组合,无缘晋级世乒赛混双四强
  • 中国社科院国际合作局副局长廖凡调任世界经济与政治研究所所长
  • 国家发改委:安全是低空经济发展的首要前提,稳妥推进低空旅游、航空运动等发展
  • 住建部:截至去年底常住人口城镇化率达到67%
  • 高温最强时段来了!北方局地高温有明显极端性
  • C919上海虹桥-深圳航线开通,东航今年计划再接收10架C919