初识动态规划

斐波那契数列大家一定很熟悉吧**【f(n)=f(n-1)+f(n-2)】**,如果要通过代码来表达斐波那契数列也是很简单的,只需要一个简易的递归即可。但是由于递归的一些缺陷,自然有人会写出迭代方式

int Fun(int n){if(n==1 || n==2)return 1;first=1;second=1third=0;while(n>2){third=first+second;first=second;second=third;n--;}return third;
}

迭代版本如上图👆:

我们会发现,所求的第n个斐波那契数的值与第n-1个和第n-2个值密切相关,每次的循环三者的值都会一起得到更新,最终达到临界值就是答案。像这种算法我们称之为动态规划

对于动态规划的题目,一般有一个固有的步骤。
1、定义状态方程
2、构建状态转移方程
3、设置初始值

下面我们通过具体题目来感受dp算法

https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4?
tpId=13&tqId=11161&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

青蛙跳台问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

这个问题我们需要一定的逆向思维

分析:
青蛙到第n级台阶的上一步在第n-1级或者第n-2级
到第n-1级的上一步在第n-2级或第n-3级
到第n-2级的上一步在第n-3级或第n-4级
………………………………

到此我们可以发现规律,到达第n级台阶的方法无非是到达第n-1级和到达第n-2级的方法之和

因此我们可以先完成第一步,定义状态方程f(n),表示到达第n级台阶的方法数

第二步,我们需要把求第n级台阶方法数的问题转变为求第n-2级和第n-1级台阶方法数(以此类推)
于是求出状态转移方程
f(n)=f(n-1)+f(n-2)

最后就需要设初值了,由于n>=2时转移方程才有意义,因此初始值就是为n=1和n=0所设置了
规定f(1)=f(0)=1

int jumpFloor(int number){if(number<2)return number;//赋初值int first=1;    //f(n-2)int second=1; //f(n-1)int third=0   //待求得f(n)while(n>=2){third=first+second;first=second;second=third;n--;}return third;

(会发现其实这就是一个斐波那契数列问题的实际应用)

矩形摆放问题

https://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6?
tpId=13&tqId=11163&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/questionranking

我们可以用 2 * 1 的小矩形横着或者竖着去覆盖更大的矩形。请问用n个 2 * 1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?

分析:

类似于青蛙跳台
要形成2n的矩形的方式无非是以下两种情形方法数之和
1、在2
(n-1)的矩形上竖放一个2 * 1矩形
2、在2*(n-2)的矩形上横放两个2 * 1矩形

因此可以很快的定义出状态方程f(n)
f(n),代表形成2*n矩形的方法数

从而写出状态转移方程
f(n)=f(n-1)+f(n-2)

最后设置初始值
f(1)=1,f(2)=2

这样问题就变成一种类斐波那契数列的数学递推。

最长子序列问题

https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?
tpId=13&tqId=11183&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。

我们依旧可以借鉴前两题的思想,试着去定义状态方程

f(array[i])可以看作是以array[i]为结尾的一个子序列和

自然需要把问题向前推,如果array[i-1]+array[i]的值大于array[i],那么i-1~i就有可能是一个答案,当遇到某个值添加之后序列减小,就可以得出以array[i]为尾的最长子序列了

状态转移方程:f(n)=max(f(n)+f(n-1),f(n))

设置初始值:以array[0]为尾的最长子序列就是本身

int FindGreatestSumOfSubArray(vector<int>& array){vector<int> dp(array.size(),0);dp[0]=array[0];			//设初值int maxsum=dp[0];		//记录当前最长子序列for(int i =1 ; i < array.size() ; ++i){dp[i]=max(array[i],array[i]+dp[i-1]);if(dp[i]>maxsum)maxsum=dp[i];}return maxsum;
}

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

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

相关文章

kube-ovn自定义vpc

配置自定义vpc 开启自定义vpc网关配置 对于自定义的vpc网关需要configmap配置文件进行开启 ovn-vpc-nat-config中指定了自定义vpc网关的pod使用的镜像&#xff0c;自定义vpc的网关就是一个pod&#xff0c;在pod中通过配置iptables来实现了eip、snat、dnat、fip 对于ovn-vpc-n…

Adobe Me下载安装免费(专业视频和音频编码应用软件Me安装包下载2024【Windows版】)

Adobe全家桶下载方式 Ae下载 Pr下载 Ai下载 Me下载 将持续更新~ 文章目录 Adobe全家桶下载方式Me下载方式【点我获取下载链接】我们的网站一、Me简介二、链接内容包含1.Me软件 声明 Me下载方式【点我获取下载链接】 百度网盘下载&#xff1a;百度网盘下载夸克网盘下载&#…

[Bug解决] Invalid bound statement (not found)出现原因和解决方法

1、问题描述 在写了一个很普通的查询语句之后&#xff0c;出现了下面的报错信息 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.oauth.mapper.WxVisitorQrBeanMapper.selectByComIdAndEmpId at org.apache.ibatis.binding.Mappe…

基于python+django+vue.js开发的健身房管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;教练管理、会员管理、场地管理、设备管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_…

嵌入式C语言学习——基于Linux与GCC(二)

系列文章目录 一.C语言常用关键字及运算符操作 文章目录 系列文章目录内存四区指针指针概述指针 修饰符constvolatiletypedef 指针运算符多级指针 数组数组空间字符空间及地址 结构体、共用体定义、字节对齐位域 内存分布图段错误分析 内存四区 C/C语言的内存四区&#xff0…

Django模板(四)

一、include标签 加载一个模板,并在当前上下文中进行渲染。这是一种在模板中 “包含” 其他模板的方式 简单的理解:在当前模板中引入另外一个模板内容 1.1、使用方法 模板名称可以是变量,也可以是单引号或双引号的硬编码(带引号)的字符串 {% include "foo/bar.ht…

ALBEF算法解读

ALBEF论文全名Align before Fuse: Vision and Language Representation Learning with Momentum Distillation&#xff0c;来自于Align before Fuse&#xff0c;作者团队为Salesforce Research。 论文地址&#xff1a;https://arxiv.org/pdf/2107.07651.pdf 论文代码&#xff1…

美国首届生成式人工智能与法律研讨(上)

美国首届生成式人工智能与法律研讨(上) 文章目录 美国首届生成式人工智能与法律研讨(上)前言一、引言二、生成式AI对法律的影响三、生成式AI与法律的跨学科研究3.1 确定和定义跨学科术语3.2 构建有价值的隐喻3.3 理解不断发展的商业模式四、生成式AI的独特性4.1 从执行狭义…

GO框架基础 (三)、xorm库

xorm介绍 官网&#xff1a;https://xorm.io/ git文档&#xff1a;https://github.com/go-xorm/xorm xorm 是一个 Go 语言的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它提供了一种简单、高效的方式来将 Go 语言中的结构体与数据库表进行映射&#xff0c;并提供了…

[OpenAI]继ChatGPT后发布的Sora模型解析与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

【RHCE】shell条件测试练习

目录 1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查次磁盘剩余空间。 2、判断web服务是否运行 3、使用curl命令访问第二题的web服务&#xff0c;看能否正常访问&#xff0c;如果能正常访问&#xff0c;…

计算机网络-H3C网络端口基础信息与配置

一、网络端口基础信息与配置 这个主要是记录一下关于华三的交换机、防火墙和路由器的物理接口的一些基础知识与配置。 1.1 命名规范 H3C的端口命名主要是根据端口的速率来进行区分的。基本都是千兆速率往上的&#xff0c;百兆的端口比较多用于二层傻瓜交换机或者不能CLI管理的。…

《戴森球计划》好玩吗?《戴森球计划》怎么在苹果电脑上安装 戴森球计划攻略 Mac游戏推荐

《戴森球计划》是一款具有强大现实科学基础的模拟策略游戏&#xff0c;玩家的目标是构建能源效率极高的戴森球以解决能源问题。游戏的背景设定启发于科幻作品中的戴森球概念。游戏采用逼真的物理模拟&#xff0c;玩家需要合理规划资源&#xff0c;以应对复杂的能源危机。那么《…

【LeetCode+JavaGuide打卡】Day20|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

学习目标&#xff1a; 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先 学习内容&#xff1a; 530.二叉搜索树的最小绝对差 题目链接&&文章讲解 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值…

C语言easyx飞机大战源码+素材

飞机大战游戏完整源码 一、项目背景 在数字娱乐飞速发展的今天,电子游戏已经成为许多人生活中不可或缺的一部分。飞机大战,作为一款经典的射击游戏,以其简单易上手、刺激好玩的特点,深受玩家的喜爱。本项目旨在利用EasyX图形库,为玩家呈现一个全新的飞机大战游戏体验。 …

【计算机网络】网络编程套接字UDP服务器客户端的简单模拟

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 前置知识1.1 源IP和目的IP1.2 端口号1.3 TCP协议和UDP协议初识1.4 网络字节序1.5 …

C# OpenCvSharp DNN Low Light image Enhancement

目录 介绍 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN Low Light image Enhancement 介绍 github地址&#xff1a;https://github.com/zhenqifu/PairLIE 效果 模型信息 Model Properties ------------------------- ------------------------------------------…

文献学习-1-Continuum Robots for Medical Interventions

Chapt 5. 连续体机构分析 5.1 文献学习 5.1.1 Continuum Robots for Medical Interventions Authors: PIERRE E. DUPONT , Fellow IEEE, NABIL SIMAAN , Fellow IEEE, HOWIE CHOSET , Fellow IEEE, AND CALEB RUCKER , Member IEEE 连续体机器人在医学上得到了广泛的应用&a…

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样&#xff0c;卷积神经网络依然是一个层级网络&#xff0c;只不过层的功能和形式发生了变化。 典型的CNN结构包括&#xff1a; 数据输入层&#xff08;Input Layer&#xff09;卷积层&#xff08;Convolutional Layer&#x…

Avalonia学习(二十四)-系统界面

目前项目式练习&#xff0c;界面内容偏多&#xff0c;所以不给大家贴代码了&#xff0c;可以留言交流。此次为大家展示的是物联项目的例子&#xff0c;仅仅是学习&#xff0c;我把一些重点列举一下。 界面无边框 以前的样例主要是通过实现控件来完成的&#xff0c;前面已经有窗…