【刷题篇】动态规划(三)

news2024/11/25 23:44:49

文章目录

  • 1、第 N 个泰波那契数
  • 2、三步问题
  • 3、使用最小花费爬楼梯
  • 4、解码方法
  • 5、不同路径
  • 6、不同路径 II

1、第 N 个泰波那契数

泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

在这里插入图片描述

class Solution {
public:
    int tribonacci(int n) {
         //状态表示
        vector<int> dp(n+1);
        //特殊情况
        if(n==0)
            return 0;
        if(n==1||n==2)
            return 1;
         //初始化
        dp[0]=0;
        dp[1]=dp[2]=1;
        for(int i=3;i<=n;i++)
        {
            //状态转移方程
            dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
        }
        return dp[n];
    // //空间优化
    // //创建三个值
    //     int a=0;
    //     int b=1;
    //     int c=1;
    //     int d=0;
    //     if(n==0)
    //         return 0;
    //     if(n==1||n==2)
    //         return 1;
    //     for(int i=3;i<n+1;i++)
    //     {
    //         d=a+b+c;
    //         a=b;
    //         b=c;
    //         c=d;
    //     }
    //     return d;
    }
};

2、三步问题

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
在这里插入图片描述

class Solution {
public:
    int waysToStep(int n) {
        //状态表示
        vector<int> dp(n+1);
        //特殊情况处理
        if(n==1||n==2)
            return n;
        if(n==3)
            return 4;
        //初始化
        dp[1]=1,dp[2]=2,dp[3]=4;
        for(int i=4;i<=n;i++)
        {
            dp[i]=((dp[i-1]+dp[i-2])%1000000007+dp[i-3])%1000000007;
        }
        //返回
        return dp[n];
    }
};

3、使用最小花费爬楼梯

数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。
请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
在这里插入图片描述

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        //创建dp
        int n=cost.size();
        vector<int> dp(n+1);
        //初始化
        for(int i=2;i<=n;i++)
        {
            dp[i]=min(cost[i-1]+dp[i-1],cost[i-2]+dp[i-2]);
        }
        return dp[n];
    }   
};

4、解码方法

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int numDecodings(string s) {
        //创建dp
        int n=s.size();
        vector<int> dp(n);
        //初始化
        dp[0]=s[0]!='0';
        //处理特殊
        if(n==1)
            return dp[0];
        if(s[0]!='0'&&s[1]!='0') dp[1]+=1;
        int com=(s[0]-'0')*10+s[1]-'0';
        if(com>9&&com<27)
            dp[1]+=1;
        for(int i=2;i<n;i++)
        {
            if(s[i]!='0') dp[i]=dp[i-1];
            int com=(s[i-1]-'0')*10+s[i]-'0';
            if(com>9&&com<27)
                dp[i]+=dp[i-2];   
        }
        return dp[n-1];
    }
};
//简化
class Solution {
public:
    int numDecodings(string s) {
        //创建dp
        int n=s.size();
        vector<int> dp(n+1);
        //初始化
        dp[0]=1;
        dp[1]=s[0]!='0';
        for(int i=2;i<=n;i++)
        {
            if(s[i-1]!='0') dp[i]=dp[i-1];
            int com=(s[i-2]-'0')*10+s[i-1]-'0';
            if(com>9&&com<27)
                dp[i]+=dp[i-2];   
        }
        return dp[n];
    }
};

5、不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?

在这里插入图片描述

class Solution {
public:
    int uniquePaths(int m, int n) {
        //状态,创建dp
        vector<vector<int>> dp(m+1,vector<int>(n+1));
        //初始化
        dp[0][1]=1;
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {//状态转移方程
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m][n];
    }
};

6、不同路径 II

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。

在这里插入图片描述

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& ob) {
        //创建dp
        int row=ob.size();
        int col=ob[0].size();
        vector<vector<int>> dp(row+1,vector<int>(col+1));
        //初始化
        dp[0][1]=1;
        for(int i=1;i<=row;i++)
        {
            for(int j=1;j<=col;j++)
            {
                if(ob[i-1][j-1]==0)
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[row][col];
    }
};

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

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

相关文章

Spring基础(2):放弃XML,走向注解

上一篇并没有实际地带大家去看源码&#xff0c;而是介绍了两个概念&#xff1a; BeanDefinitionBeanPostProcessor 当然&#xff0c;我介绍得非常笼统&#xff0c;不论是BeanDefinition还是BeanPostProcessor其实都有着较为复杂的继承体系&#xff0c;种类也很多。作为Spring…

文心一言 VS 讯飞星火 VS chatgpt (130)-- 算法导论11.2 2题

二、用go语言&#xff0c;对于一个用链接法解决冲突的散列表&#xff0c;说明将关键字 5,28,19,15,20,33,12,17,10 插入到该表中的过程。设该表中有 9 个槽位&#xff0c;并设其散列函数为 h(k)k mod 9。 文心一言&#xff1a; 在这个问题中&#xff0c;我们使用 Go 语言来解…

Day23力扣打卡

打卡记录 将 x 减到 0 的最小操作数&#xff08;逆向思维 滑动窗口&#xff09; 链接 将 x 减到 0 的最小操作数&#xff0c;可以逆向思考&#xff0c;求一个数组中的最大长度的滑动窗口&#xff0c;来使得这个窗口里的数等于 全数组之和 - x 的值。 class Solution { publ…

MySQL(11):数据处理之增删改

插入数据 方式1&#xff1a; 一条一条的添加数据 为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....);# 没有指明添加的字段 INSERT INTO emp1 VALUES (1,TOM,2023-11-06,3400);没有指明添加的字段&#xff0c;要按照声明顺序&#xff0c;进行…

U_boot介绍

系统移植之前的了解的&#xff1a; 首先需要移植一个 bootloader 代码&#xff0c;这个 bootloader 代码用于启动 Linux 内核&#xff0c;bootloader 有很多&#xff0c;常用的就是 U-Boot;移植好 U-Boot 以后再移植 Linux 内核&#xff0c;移植完 Linux 内核以后 Linux 还不能…

Flink SQL Window TopN 详解

Window TopN 定义&#xff08;⽀持 Streaming&#xff09;&#xff1a; Window TopN 是特殊的 TopN&#xff0c;返回结果是每⼀个窗⼝内的 N 个最⼩值或者最⼤值。 应⽤场景&#xff1a; TopN 会出现中间结果&#xff0c;出现回撤数据&#xff0c;Window TopN 不会出现回撤数据…

网络架构新升级:400G OSFP光模块系列产品概述

移动数据、互联网、大数据的发展和需要&#xff0c;400G OSFP越来越受到市场的欢迎。说起400G的封装形式&#xff0c;大多数人脱口而出的肯定是QSFP-DD&#xff0c;而我们今天给大家介绍的是400G的另一种封装——OSFP。下面就跟着小易来了解一下吧&#xff01; 一、OSFP光模块…

SSM-spring注解式缓存redis

目录 一.redis整合 1.1.pom配置 1.2.配置文件spring-redis.xml 1.3.配置redis的key生成策略 二.redis的注解式开发及应用场景 2.1.什么是redis的注解式 2.2.Cacheable 2.3.自定义策略 2.4.CachePut 注解 三.redis的击穿穿透雪崩 1.击穿问题 2.穿透问题 3.雪崩问题 一…

《golang设计模式》第三部分·行为型模式-05-仲裁者/中介模式(Mediator)

文章目录 1. 概述1.1 作用1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 仲裁者&#xff08;Mediator&#xff09;可以封装和协调多个对象之间的耦合交互行为&#xff0c;以减弱这些对象之间的耦合关联。 1.1 作用 将多个对象相互耦合的设计转变为所有对象…

k8s部署srs服务

k8s部署srs服务 项目需要把srs纳入k8s进行管理&#xff0c;需要通过k8s来部署srs服务然后原本的srs可以支持rtmp与webrtc两种&#xff0c;官网查了部署方式&#xff0c;k8s只有最基本的部署方式于是开始研究k8s部署能够正常推拉流的webrtc版本的srs 首先肯定是去官网查有无相关…

在Ansible中编写剧本实现批量服务器安全加固

1.摘要 在上一篇<<初步利用Ansible实现批量服务器自动化管理>>文章中, 我初步实现了通过编写清单和剧本来实现多台服务器的自动化管理,在本章节中, 我将利用Ansible的剧本来实现更实用、更复杂一点的功能, 主要功能包括三个:1.同时在三台服务器中增加IP访问控制,只…

pytorch之relu激活函数

目录 1、relu 2、relu6 3、leaky_relu 4、ELU 5、SELU 6、PReLU 1、relu ReLU&#xff08;Rectified Linear Unit&#xff09;是一种常用的神经网络激活函数&#xff0c;它在PyTorch中被广泛使用。ReLU函数接受一个输入值&#xff0c;如果该值大于零&#xff0c;则返回该…

PolarDB 卷来卷去 云原生低延迟强一致性读 1 (SCC READ 译 )

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友…

基于Fuzzing和ChatGPT结合的AI自动化测试实践分享

一、前言 有赞目前&#xff0c;结合insight接口自动化平台、horizons用例管理平台、引流回放平台、页面比对工具、数据工厂等&#xff0c;在研发全流程中&#xff0c;已经沉淀了对应的质量保障的实践经验&#xff0c;并在逐渐的进化中。 在AI能力大幅进步的背景下&#xff0c…

LeetCode 热题100——链表专题(二)

一、环形链表 141.环形链表&#xff08;题目链接&#xff09; 思路&#xff1a;使用快慢指针&#xff0c;慢指针走一步&#xff0c;快指针走俩步&#xff0c;如果是环形链表&#xff0c;那么快慢指针一定相遇&#xff0c;如果不是环形结构那么快指针或者快指针的next一定先为N…

Python 中 Selenium 的 getAttribute() 函数

Selenium 的 Python 模块旨在提供自动化测试过程。 Selenium Python 绑定包括一个用于编写 Selenium WebDriver 功能/验收测试的简单 API。 拥有移动能力并没有多大好处。 我们想要与页面交互&#xff0c;或者更准确地说&#xff0c;与组成页面的 HTML 片段交互。 本文将解释…

基于springboot和vue的校园二手物品交易管理系统

博主24h在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;全网最低价&#xff0c;9.9拿走&#xff01; 基于VUE的校园二手物品交易管理系统8 1、项目介绍 基于VUE的校园二手物品交易管理系统8拥有两种角色 管理员&#xff1a;闲置物品管理、订单管理、用户管理 用户…

Flink ON Yarn 模式 --- per job mode 与application mode的区别

1、per job mode&#xff1a; 对于yarn-per-job模式调度的过程&#xff1a; 1、资源调度&#xff1a; 1、因为是yarn模式&#xff0c;所以客户端会向ResourceManager申请资源&#xff0c;申请容器负责来启动ApplicationManager 2、此时ResourceManager接受到客户端的请求&#…

阿里开源中间件一览

1. 概述以及竞品对比 间件介绍官方链接竞品竞品介绍异同点对比Dubbo高性能的RPC框架&#xff0c;用于实现分布式服务的调用和管理。DubbogRPC gRPC是由Google开源的一款高性能、通用的RPC框架&#xff0c;支持多种编程语言 链接&#xff1a;gRPC Dubbo更注重于服务治理和可扩展…

1-前端基本知识-JavaScript

1-前端基本知识-JavaScript 文章目录 1-前端基本知识-JavaScript总体概述JS基础JS特点JS组成部分JS的引入方式 JS的数据类型基本数据类型引用数据类型 JS的变量JS的运算符算数运算符复合算数运算符关系运算符逻辑运算符条件运算符位运算符 JS的流程控制语句和函数流程控制-分支…