保研机试之【动态规划】

2024-05-15 05:36
文章标签 动态 规划 保研 机试

本文主要是介绍保研机试之【动态规划】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文为博客:动态规划解题套路框架 | 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.chinasem.cn/article/990947

相关文章

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

IPD推行成功的核心要素(十一)技术规划与平台规划促进公司战略成功

随着外部大环境的影响,各企业仅有良好的愿望是不够的。预测并顺应新兴市场和技术的变化,变危机为转机,不断推出强大的产品才是一个公司持续繁荣的根本保障。而高效的产品开发往往是基于某些关键技术,针对市场推出的一个或几个产品系列,这些产品系列通常共用一些产品平台,共用一种或者几种关键技术。当一家企业进入了平稳发展期,已经建立了较为完善的管理制度和产品开发流程,但是依然认为竞争对手是那样强大,那样不可战胜。

OSG学习:LOD、数据分页、动态调度

LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。在OSG的场景结点组织结构中,专门提供了场景结点osg::LOD来表达不同的细节层次模型。其中,osg::LOD结点作为父节点,每个子节点作为一个细节层次,设置不同的视域,在不同的视域下显示相应的子节点。 数据分页:在城市

Java代理-动态字节码生成代理的5种方式

上篇讲到了代理模式出现的原因,实现方式以及跟其他相似设计模式的区别。传送门@_@ http://blog.csdn.net/wonking666/article/details/79497547 1.静态代理的不足 设计模式里面的代理模式,代理类是需要手动去写的。但是手写代理的问题颇多 1.如果不同类型的目标对象需要执行同样一套代理的逻辑,比如说在方法调用前后打印参数和结果,那么仍然需要为每

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering

自动驾驶规划中使用 OSQP 进行二次规划 代码原理详细解读

目录 1 问题描述 什么是稀疏矩阵 CSC 形式 QP Path Planning 问题 1. Cost function 1.1 The first term: 1.2 The second term: 1.3 The thrid term: 1.4 The forth term: 对 Qx''' 矩阵公式的验证 整体 Q 矩阵(就是 P 矩阵,二次项的权重矩阵)

Android插件化学习之路(一)之动态加载综述

前段时间,公司项目完成了插件化的开发,自己也因此学习了很多Android插件化的知识,于是想把这些内容记录下来,本次带来Android插件化的第一篇:动态加载综述 Android插件化学习之路(一)之动态加载综述 Android插件化学习之路(二)之ClassLoader完全解析 Android插件化学习之路(三)之调用外部.dex文件中的代码 Android插件化学习之路(四)之使用插件中的R

在WinCE的C#编程中,需要静态调用C++的动态库,需要添加using System.Runtime.InteropServices

using System.Runtime.InteropServices;         [DllImport("Win32DLL.dll", EntryPoint = "WriteREG_SZToRegTCHAR")]         private static extern bool WriteREG_SZToRegTCHAR(int iFlag, string regKeyP