动态规划专练(一)

news2025/1/9 21:33:39

文章目录

  • 前言
  • 一、斐波那契数
    • 1.题目介绍
    • 2.思路
    • 3.代码
  • 二、爬楼梯
    • 1.题目介绍
    • 2.思路
    • 3.代码
  • 三、使用最小花费爬楼梯
    • 1.题目介绍
    • 2.思路
    • 3.代码


在这里插入图片描述

前言


此篇为动态规划的初阶篇,所以比较简单,适合刚入门的新手学,如果你已经入门了,就无需看这了,以后我会持续更新关于动态规划的文章的

一、斐波那契数

1.题目介绍

509. 斐波那契数
在这里插入图片描述

2.思路

1.确定初始状态

f[0]=0,f[1]=1;

  1. 确定状态

我们所需要求的是f[n]

2.确定状态转移方程

f[n]是由从f[n-1]和f[n-2]转换来的在这里插入图片描述

3.代码

int fib(int n){
   int f[35];
   f[0]=0;
   f[1]=1;
   for(int i=2;i<=n;i++)
   {
       f[i]=f[i-1]+f[i-2];
   }
   return f[n];
}

二、爬楼梯

1.题目介绍

爬楼梯
在这里插入图片描述

2.思路

其实与上面的斐波那契数的题是差不多的,就是需要改变以下思维
设f[n]为到达n层所有的方法
1.确定初始状态

从0层到一层,只能跨一步到第一层,即f[1]=1,从0层到第二层可以跨两个一步或者直接跨2步到第二层,即f[2]=2;

  1. 确定状态

我们所需要求的是f[n]

2.确定状态转移方程

要想到达f[n],有两种方法可以到达,从f[n-1]向上跨一步或者从f[n-2]向上跨两步,所以到达f[n]的方法是到f[n-1]和到f[n-2]的方法的和
在这里插入图片描述

3.代码

int climbStairs(int n){
        int f[50]={0};
        f[1]=1;
        f[2]=2;
        for(int i=3;i<=n;i++)
        {
            f[i]=f[i-1]+f[i-2];
        }
        return f[n];
}

三、使用最小花费爬楼梯

1.题目介绍

使用最小花费爬楼梯
在这里插入图片描述

2.思路

此题与上题很相似,但此题不是求方法,而是求最低的花费,同样只需要将思维转换一下就行了
设f[n]为到达n层的最低花费
1.确定初始状态

本题说可以从0层和一层开始,但是要想最低花费,肯定从1层开始嘛,所以f[0]=0;
初始在0层,所以f[1]=0;

  1. 确定状态

我们所需要求的是f[n]

2.确定状态转移方程

要想到达f[n]花费最小,有两种方法可以到达,所以有两种花费,比较f[n-1]向上跨一步加上跨一步的花费和从f[n-2]向上跨两步加上跨两步的花费,去最低者,即使f[n]的最低花费
在这里插入图片描述

3.代码

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
     int f[10000]={0};
     f[0]=0;
     f[1]=0;
     int size=cost.size();
     for(int i=2;i<=size;i++)
     {
         f[i]=min(f[i-1]+cost[i-1],f[i-2]+cost[i-2]);
     }
     
    return f[size];
    }
};

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

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

相关文章

[LeetCode]杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上…

(三)Python-tkinter桌面应用(爱心雨)

&#xff08;三&#xff09;Python-tkinter桌面应用&#xff08;爱心雨&#xff09; 一、前言 我们已经了解到tkinter可以制作爱心&#xff0c;弹幕&#xff0c;为了能让他看起来更加的充满心意&#xff0c;于是&#xff0c;我们决定将他制作为爱心雨。让它看起来更加的特别&a…

字节测试总监深度剖析,都2023年了,测试用例还不重视起来

​ 测试用例对于测试工作的作用&#xff1a; 1、指导测试的实施 测试用例主要适用于集成测试、系统测试和回归测试。在实施测试时测试用例作为测试的标准&#xff0c;测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中…

超长JVM总结,面试必备

目录 什么是JVM JVM内存区域 JVM运行时内存(jdk1.7) 垃圾回收与算法 分代收集算法 GC 分代收集算法 VS 分区收集算法 GC 垃圾收集器 什么是JVM JVM 是可运行 Java 代码的假想计算机 &#xff0c;包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收&#xff0c;…

ChatGPT已死?AutoGPT太强?

今天聊聊 AutoGPT。 OpenAI 的 Andrej Karpathy 都大力宣传&#xff0c;认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌似出现了一种新的趋势&#xff1a;自主人工智能。 这不是空穴来风&#xff0c;最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉…

PYTHON中的常见离散分布

1.什么是伯努利分布&#xff1f; 伯努利分布是一种二元随机变量的概率分布&#xff0c;其中一个结果的概率为p&#xff0c;另一个结果的概率为1-p。伯努利分布通常用于模拟二项分布&#xff0c;其中n个独立的伯努利试验被执行&#xff0c;每个试验有两个可能的结果&#xff08…

Unity VFX -- (5)VFX Graph基础

在Unity中&#xff0c;还有一种完全不同的创建VFX的工作流&#xff0c;VFX Graph。VFX Graph能够生成出和粒子系统相同或更好的效果。 相比于粒子系统&#xff0c;VFX Graph的一个最大的好处是它能够在保持应用良好性能的情况下&#xff0c;模拟出多得多的粒子。对于VFX艺术家来…

人生是一个长期的均值回归

到了现在这个阶段&#xff0c;总想说点什么。 我一直觉得记录并收藏每个阶段的状态是一件很有意义且奇妙的事&#xff0c;尤其是多少年后还能清晰地回忆其当初的心境&#xff0c;联想到曾经所设立的一些目标以及为之做出的努力&#xff0c;这些人生经历的脉纹清晰而完整&#x…

机器学习算法 KNN

文章目录 一、概述二、代码实现三、K值的选择四、距离计算五、总结1. K-近邻算法2. 优缺点 一、概述 k-近邻算法&#xff08;k-Nearest Neighbour algorithm&#xff09;&#xff0c;又称为KNN算法&#xff0c;是数据挖掘技术中原理最简单的算法。 KNN的工作原理&#xff1a;…

QT学习笔记6

一.QLable控件使用&#xff1a; 创建控件&#xff1a; 方式一&#xff1a;代码 文本&#xff1a; QLabel *labelnew QLabel(this);//建立标签 label->setText("这是代码创建标签"); 超链接&#xff1a; label->setText("<h1><a href\"h…

面向对象三大特性之一:封装

目录 什么是封装&#xff1f; 封装的优点 封装的实现 总结 在C中&#xff0c;类和对象是面向对象编程的基础&#xff0c;而封装是面向对象编程的三大特性之一。封装的作用是将数据和行为组合在一起&#xff0c;形成一个类&#xff0c;对外部隐藏实现细节&#xff0c;从而提高…

【C++】位图模拟实现

文章目录 需要实现的接口构造函数如何得知要设置的元素的位置setresetfliptestsizecountanynoneall打印位图的信息 bitset.h 需要实现的接口 namespace Mango {template<size_t N> //N表示开多少个比特位class bitset{public://构造函数bitset();//设置位,将某一个数对应…

Error:java: 程序包lombok不存在

Error&#xff1a;java: 程序包lombok不存在 有时候明明代码窗口里可以看到有这个类,但是启动就是报错说不存在(图1,图2),试过很多办法 1.查看工具中maven的设置,setting文件目录,maven目录,本地仓库目录 2.删除本地maven中的包,重新import, 3.jdk版本是否和pom里面的一致 4.重…

一文教你快速搭建数据驱动自动化测试框架

目录 1. 什么是数据驱动自动化测试框架 2. 搭建数据驱动自动化测试框架的步骤 步骤1&#xff1a;确定测试需求 步骤2&#xff1a;准备测试数据 步骤3&#xff1a;编写测试脚本 步骤4&#xff1a;选择测试工具 步骤5&#xff1a;搭建测试环境 步骤6&#xff1a;执行测试 …

二叉树相关基础选择填空题

目录 1、二叉树的( )遍历相当于广度优先遍历&#xff0c;( )遍历相当于深度优先遍历 2、已知某二叉树的前序遍历序列为5 7 4 9 6 2 1&#xff0c;中序遍历序列为4 7 5 6 9 1 2&#xff0c;则其后序遍历序列为&#xff08; &#xff09; 3、已知某二叉树的中序遍历序列为JGDHK…

信号平滑处理

信号平滑处理 此示例说明如何使用移动平均滤波器和重采样来隔离一天中时间的周期性分量对每小时温度读数的影响&#xff0c;以及如何去除开环电压测量中不需要的电线噪声。该示例还说明如何通过使用中位数滤波器对时钟信号的水平进行平滑处理&#xff0c;同时保留边沿。该示例…

c++算法初级8——递推

c算法初级8——递推 文章目录 c算法初级8——递推递推递推思想的运用错位排序杨辉三角&#xff08;二维递推&#xff09; 递推 递推思想&#xff1a; 根据已有的东西一点点地推出未知的东西。 使用递推解题三步骤&#xff1a; 数学建模找出递推式和初始条件写出代码。 张爽…

[STL]vector的使用+模拟实现

[STL]vector的使用模拟实现 文章目录 [STL]vector的使用模拟实现一、vector的使用1.构造函数2.迭代器3.容量操作4.vector的访问5.vector的修改 二、几个细节1.范围for2.扩容机制3.迭代器失效4.构造函数错误调用5.vector的深拷贝与浅拷贝6.vector的框架 三、vector模拟实现vecto…

hitcon_2017_ssrfme、[BJDCTF2020]Easy MD5、[极客大挑战 2019]BuyFlag

hitcon_2017_ssrfme 进入环境给出源码 <?php if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers explode(,, $_SERVER[HTTP_X_FORWARDED_FOR]);$_SERVER[REMOTE_ADDR] $http_x_headers[0];}echo $_SERVER["REMOTE_ADDR"];$sandbox "sandbo…

Leetcode225. 用队列实现栈

文章目录 1.题目描述2.原题链接3.思路分析4.代码实现 1.题目描述 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int…