保研机试之【动态规划】

news2025/4/5 16:49:29

本文为博客:动态规划解题套路框架 | labuladong 的算法笔记 的笔记

前言

动态规划问题的一般形式就是求最值,求解动态规划的核心问题是穷举。动态规划三要素为:最优子结构、重叠子问题、状态转移方程。首先要判断,该问题是否具有重复子问题,如果有则可以用动态规划求解。动态规划问题存在「重叠子问题」,如果暴力穷举的话效率会很低,所以需要你使用「备忘录」或者「DP table」来优化穷举过程;动态规划只有列出正确的「状态转移方程」,才能正确地穷举。

理解重复子问题:https://leetcode.cn/problems/fibonacci-number/description/

递归算法的时间复杂度怎么计算?就是用子问题个数乘以解决一个子问题需要的时间。

暴力求解(注意树的形状)

会存在很多计算重复的情况,这也是为什么不采用备忘录会导致效率低下,时间复杂度为O(2^{n}),因为子问题个数为2^{n},解决一个子问题需要的时间(加法)为1。

带备忘录的递归解法(注意树的剪枝)

最后就剩类似红色方框的形状:

时间复杂度为O(n),因为子问题个数为n,解决一个子问题需要的时间(加法)为1。

dp 数组的迭代(递推)解法

理解状态转移方程:动态规划解题套路框架 | labuladong 的算法笔记

暴力求解

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        if(amount==0){return 0;}
        if(amount<0){return -1;}
        int ans=INT_MAX;
        for(int i:coins){
            int temp=coinChange(coins,amount-i);
            if(temp==-1){continue;}
            ans=min(ans,temp+1);
        }
        if(ans==INT_MAX){
            return -1;
        }
        else{return ans;}
    }
};

直接超时:

带备忘录的递归

class Solution {
public:
    unordered_map<int,int> hmap;
    int coinChange(vector<int>& coins, int amount) {
        if(amount==0){return 0;}
        if(amount<0){return -1;}
        if(hmap.find(amount)!=hmap.end()){
            return hmap[amount];
        }
        int ans=INT_MAX;
        for(int i:coins){
            int temp;
            if(hmap.find(amount-i)!=hmap.end()){
                temp=hmap[amount-i];
            }
            else{
                temp=coinChange(coins,amount-i);
                if(temp==-1){continue;}
                else{hmap[amount-i]=temp;}
            }
            ans=min(ans,temp+1);
        }
        if(ans==INT_MAX){
            return -1;
        }
        else{return ans;}
    }
};

但是!

dp 数组的迭代解法

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> g(10010,amount+1);
        g[0]=0;
        for(int i=1;i<=amount;i++){
            for(auto j:coins){
                if(i-j>=0){
                    g[i]=min(g[i],g[i-j]+1);
                }
            }
        }
        if(g[amount]>amount){return -1;}
        return g[amount];
    }
};

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

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

相关文章

模电·场效应管放大电路的动态分析_039

场效应管放大电路的动态分析 一、场效应管的低频小信号等效模型二、基本共源放大电路的动态分析三、基本共漏放大电路的动态分析 一、场效应管的低频小信号等效模型 与分析晶体管的 h h h参数等效模型相同&#xff0c;将场效应管也看成一个两端口网络&#xff0c;栅极与源极之间…

MobileNet 网络详解

一、了解 网络亮点&#xff1a; 1、DW网络&#xff0c;大大减少运算量和参数数量 2、增加超参数&#xff1a;控制卷积层卷积核个数的超参数 &#xff0c;控制图像输入大小的超参数 &#xff0c;这两个超参数是人为设定的&#xff0c;不是机器学习到的。 二、DW卷积&#xff…

怎么防止源代码防泄密

随着数字化时代的到来&#xff0c;源代码作为企业和个人的重要资产之一&#xff0c;承载着无价的知识和创新。然而&#xff0c;源代码泄露已成为当今信息安全领域的重要挑战之一&#xff0c;给企业带来了严重的经济损失和声誉风险。面对这一挑战&#xff0c;我们有责任加强对源…

亿级流量系统架构设计与实战

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

【火热征稿~~】2024年心理、哲学与历史国际会议(ICPPH 2024)

2024年心理、哲学与历史国际会议&#xff08;ICPPH 2024&#xff09; 2024 International Conference on Psychology, Philosophy, and History 【会议简介】 2024年心理、哲学与历史国际会议将于历史文化名城武汉召开。此次盛会集结了来自世界各地的心理学家、哲学家和历史学…

01软件下载安装和P解

凯哥英语视频 软件下载安装和P解 凯哥英语视频1.官网直接下&#xff0c;专业版安装不会有人不会吧实在下载不到就去我这百度云吧结语 1.官网直接下&#xff0c;专业版 点击前往逛网下载https://www.jetbrains.com/pycharm/ 下载专业版&#xff0c;奶茶外卖都能点&#xff0c;只…

【爬虫】爬取股票数据写入数据库并显示(四)

本文所涉及代码已全部打包上传&#xff0c;需要可以到文章末尾查看获取方式&#xff0c;免费&#xff0c;仅做学习交流&#xff01;&#xff01;&#xff01; 股票客户端软件 2024/05&#xff0c;本文主要内容如下&#xff1a; 使用python requests爬取东方财富官网数据。将爬…

ros1版本apollo感知融合算法

apollo.ros-7.0.0 本文章针对apollo 7.0.0版本进行了ros1移植&#xff0c;具体介绍见下文。 PS&#xff1a;项目开发详细了解可在评论区留言。 ros版本apollo7.0.0感知算法 基于ros1的apollo 7.0.0感知融合算法。 简介 此项目基于ros1的apollo 7.0.0感知融合算法&#xff0…

05. 【Java教程】第一个 Java 程序

本节我们将以Windows操作系统为例&#xff0c;编写并执行第一个Java程序。在这之前&#xff0c;请确保你的操作系统上已经安装了JDK 1. 编译程序 大家可能有个疑问&#xff0c;为什么需要编译程序呢&#xff1f;计算机不能直接执行我们编写的源代码吗&#xff1f; 这是由于计…

OV SSL证书的特点

OV SSL证书&#xff0c;全称为Organization Validation SSL Certificate&#xff08;组织验证型SSL证书&#xff09;&#xff0c;是一种中级的SSL证书类型。与仅验证域名所有权的DV&#xff08;Domain Validation&#xff09;证书不同&#xff0c;OV证书在颁发前会执行更加严格…

Jmeter接口测试之参数化

在接口测试中&#xff0c;某些时候一些场景会使用到参数化的场景&#xff0c;参数化简单的说就是同一个请求需要不同的数据&#xff0c;比如在性能测试中需要并发多个用户的场景&#xff0c;这样的目的是为了模拟真实的用户场景&#xff0c;需要模拟不同的账号&#xff0c;这里…

ZL-016D多通道小鼠主动跑轮系统主要研究动物生活节律

简单介绍&#xff1a; 多通道小鼠主动跑轮系统是由动物本身自发运动来推动跑轮转动。在这种构型中&#xff0c;笼内动物长期活动的信息&#xff0c;如跑轮转动方向、转数、累计总行程等&#xff0c;能够使用编码器进行长度计记录。此装置由转轮组件、笼体、以及转动方向速度传…

独享静态IP:跨境网络新助手

在数字化浪潮席卷全球的今天&#xff0c;互联网已成为人们生活中不可或缺的一部分。而在这个由数据和信息构成的虚拟世界里&#xff0c;IP地址作为每一个网络设备的独特标识&#xff0c;其重要性不言而喻。特别是独享静态IP&#xff0c;它不仅为用户提供了更加稳定、安全的网络…

美国加州正测试ChatGPT等生成式AI,在4大部门应用

5月11日&#xff0c;美联社消息&#xff0c;美国加州政府正在测试ChatGPT等生成式AI&#xff0c;应用在税收和收费管理部、交通部、公共卫生部以及卫生与公众服务部4大部门。 测试时间6个月&#xff0c;为其提供技术支持的一共有5家公司&#xff0c;分别是OpenAI、Anthropic、…

【北京迅为】《iTOP-3588开发板从零搭建ubuntu环境手册》-第2章 获取并安装Ubuntu操作系统

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

下载文件名称乱码或变成了随机码

如图 后端是有正常返回附件名称的,浏览器开发工具中也正常显示了这个数据,但是下载下来的文件名称确实一堆随机码. 其实这个问题的原因是因为跨域 查看console: Refused to get unsafe header "content-disposition" 现象,后端传递到前端的fileName不能被识别,下载…

Sass语法介绍-混合指令

08 【Sass语法介绍-混合指令】 1.前言 混合指令在 Sass 中也是一个比较常用的指令&#xff0c;在前面我们讲解的内容中有编写过混合指令 mixin &#xff0c;本节我们将详细讲解混合指令 mixin 的语法包括定义混合指令和引用混合指令等等&#xff0c;混合指令同样非常好用&…

期权隐含波动率到底是什么意思?

今天期权懂带你了解期权隐含波动率到底是什么意思&#xff1f;期权隐含波动率解析。通俗的说&#xff0c;期权隐含波动率是在期权市场中买家和卖家对于&#xff0c;某一期权合约价格变动幅度大小的判断。 期权隐含波动率到底是什么意思&#xff1f; 隐含波动率是根据期权市场价…

财务分析软件怎么选?看这篇就够了

怎么才能选到一款真正能够用于财务分析的软件&#xff1f;且是能够又快又直观地将财务数据情况分析清楚&#xff0c;从不同角度灵活分析财务数据背后的关联的软件&#xff0c;简单来说那得选一款BI财务分析软件。具体哪款BI财务分析软件更合适&#xff1f;那就要从以下几个方面…

Java 程序员必备的 15 个框架集

Java 程序员方向太多&#xff0c;且不说移动开发、大数据、区块链、人工智能这些&#xff0c;大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢&#xff1f; d8f18202405131220599753.png 1.Spring 毫无疑问&#xff0c;Spri…