代码随想录第35天|动态规划

news2024/11/17 11:46:30

理论基础

动态规划是由前一个状态推导出来的, 而贪心是局部直接选取最优

五部曲:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

debug过程 : dp数组打印查看


509. 斐波那契数

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

在这里插入图片描述

//动态规划的方法
//1.明确dp[i]含义:第i个数
//2.递推公式:dp[i] = dp[i - 1] + dp[i - 2]
//3.初始化: dp[0] = 0, dp[1] = 1
//4.遍历顺序: 从前往后
class Solution {
public:
    int fib(int n) {
        if (n < 2) return n;
        vector<int>dp(n + 1, 0);
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
};
//递归的方法
class Solution {
public:
    int fn(int n) {
        if (n == 0) return 0;
        if (n == 1) return 1;
        return fn(n - 1) + fn(n - 2);
    }
    int fib(int n) {
        return fn(n);
    }
};

70. 爬楼梯

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

  1. dp[i] : 爬至第 i 阶楼梯总共的方法
  2. 递推公式 : dp[i] = dp[i-1] + dp[i-2],
    • i 可以从 i-1 走一步上来,
    • i 可以从 i-2 走两个上来,
    • 所以 i 等于 [i-1] + [i-2]
  3. 初始化: n=0无意义, 所以从n=1开始初始化
  4. 遍历顺序: 从前向后遍历
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 3) return n; 
        vector<int> dp(n + 1, 0);//索引: 0 1 ... n, 总共有n+1个元素
        dp[1] = 1;
        dp[2] = 2;
        //dp[3] = 3;此处使用递归公式确定
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];//索引n代表第n阶楼梯
    }
};

746. 使用最小花费爬楼梯

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

  1. dp[i] : 到达 i 的费用
  2. 递推公式: dp[i] = min(dp[i-2] + cost[i-2], dp[i-1] + cost[i-1]);
  3. 初始化 dp[0] = 0, dp[1] = 0 一开始不用耗费, 直接在 0 或 1 阶的楼梯上
  4. 遍历顺序: 从 0~n

在调试时确定其范围, 确定dp数组的大小
请添加图片描述
请添加图片描述

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

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

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

相关文章

科普:什么是 BC-404 ?全方位解读最新通缩型 NFT 标准

区块链技术飞速发展的今天&#xff0c;创新从未停歇。继 ERC-404 标准问世后&#xff0c;一个名为 BC-404 的新标准应运而生&#xff0c;为 NFT 市场带来了全新的可能性。BC-404&#xff08;Bonding Curve 404&#xff09;—基于对 ERC-404 的改进&#xff0c;加密货币中第一个…

【大模型】大模型微调方法总结(二)

1.Adapter Tuning 1.背景 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的 PEFT微调方式&#xff0c;拉开了 PEFT 研究的序幕。他们指出&#xff0c;在面对特定的下游任务时&#xff0c;如果进行 Full-Fintuning&#xff0…

基于Simulink的行波故障测距

基于MATLAB/SIMULINK的输电线路故障行波仿真方法 为了更深入地学习和研究输电线路故障行波&#xff0c;通过matlab将复杂的电力系统简化为一个等效电路模型&#xff0c;使得故障的仿真和行波的提取更加直观和方便。首先&#xff0c;我们根据电力系统的实际情况&#xff0c;建立…

政务网站(.gov)应选择什么样的SSL证书

政府网站作为公共服务的重要平台&#xff0c;承载着发布政策信息、提供在线服务、促进政民互动等功能&#xff0c;其数据安全性和网站可信度尤为重要。因此&#xff0c;选择合适的SSL证书对于政府网站而言&#xff0c;不仅是遵循网络安全法规的需要&#xff0c;也是提升公众信任…

【vscode使用】一文帮你解决vscode打开文件不覆盖问题

【vscode使用】一文帮你解决vscode打开文件不覆盖问题 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xf…

Go 延迟调用 defer

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Go语言之函数和方法

个人网站&#xff1a; http://hardyfish.top/ 免费书籍分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码&#xff1a;3899 免费专栏分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-6…

伸缩盒模型,flex布局

目录 1、伸缩容器、伸缩项目 2、主轴方向(flex-direction) 3、主轴换行方式(flex-wrap) 4、flex-flow 5、主轴对齐方式(justify-content) 6、侧轴对齐方式_一行(align-items) 7、侧轴对齐方式_多行(align-content) 8、元素水平垂直居中 9、项目在主轴的基准长度(flex-b…

大模型训练数据

自《中共中央国务院关于构建数据基础制度更好发挥数据要素作用的意见》发布以来&#xff0c;我国数据要素建设不断深入&#xff0c;在国家数据局等 17 部门联合印发的《“数据要素 ” 三年行动计划&#xff08;2024 - 2026 年&#xff09;》进一步明确 “建设高质量语料库和基础…

【深度学习总结_03】使用弱智吧数据微调LLama3+自我认知训练

使用弱智吧数据微调LLama3自我认知训练 使用弱智吧数据微调LLama3自我认知训练下载LLama3权重准备数据集克隆alpaca-lora仓库修改finetune.py代码修改LlamaTokenizer注释代码手动安装apex 运行finetune.py运行generate.py文件导出Lora模型自我认知训练 使用弱智吧数据微调LLama…

每日一学(1)

目录 1、ConCurrentHashMap为什么不允许key为null&#xff1f; 2、ThreadLocal会出现内存泄露吗&#xff1f; 3、AQS理解 4、lock 和 synchronized的区别 1、ConCurrentHashMap为什么不允许key为null&#xff1f; 底层 putVal方法 中 如果key || value为空 抛出…

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具&#xff1a; 面板显示&#xff1a;工具包含一个面板&#xff0c;用于展示软件的不同版本信息。版本信息&#xff1a;面板上显示主版本号、当前版本号和子版本号。版本控制功能…

Socket——向FTP服务器发送消息并获得响应

1、简介 Socket&#xff08;套接字&#xff09;是网络编程中用于描述IP地址和端口的一个抽象概念&#xff0c;通过它可以实现不同主机间的通信。套接字可以分为几种不同的类型&#xff0c;每种类型对应不同的协议和传输模式。 1.1、基本概念 IP地址&#xff1a;用于标识网络…

智能语音抽油烟机:置入WTK6900L离线语音识别芯片 掌控厨房新风尚

一、抽油烟机语音识别芯片开发背景 在繁忙的现代生活中&#xff0c;人们对于家居生活的便捷性和舒适性要求越来越高。传统的抽油烟机操作方式往往需要用户手动调节风速、开关等功能&#xff0c;不仅操作繁琐&#xff0c;而且在烹饪过程中容易分散注意力&#xff0c;增加安全隐…

梅雨季要祛湿,更要养阳气!用好这2招,补足阳气,祛湿排寒,助你体质越来越好~

梅雨季祛湿正当时&#xff0c;但是很多人疑惑不断祛湿&#xff0c;可为什么湿气一直源源不断呢&#xff1f;除了不良生活方式没有改变外&#xff0c;很多人祛湿只是解决“标”的问题&#xff0c;没有解决“本”的问题。 中医有一句话叫“无阳难以化湿”&#xff01; 我们可以简…

前端 CSS 经典:模拟 material 文本框

效果 思路 定义三个元素&#xff0c;文本框&#xff0c;下划线&#xff0c;占位文字。input 聚焦时通过 ~ 选中兄弟元素&#xff0c;利用 required 属性 css 中的 valid 验证&#xff0c;判断 input 中是否有输入。写入过渡效果。 实现代码 <!DOCTYPE html> <htm…

基于 JuiceFS 构建高校 AI 存储方案:高并发、系统稳定、运维简单

中山大学的 iSEE 实验室&#xff08;Intelligence Science and System) Lab&#xff09;在进行深度学习任务时&#xff0c;需要处理大量小文件读取。在高并发读写场景下&#xff0c;原先使用的 NFS 性能较低&#xff0c;常在高峰期导致数据节点卡死。此外&#xff0c;NFS 系统的…

203.回溯算法:N皇后(力扣)

class Solution { public:vector<vector<string>> result; // 用于存储所有合法的 N 皇后放置方案// 判断当前位置 (row, col) 是否可以放置皇后bool isValid(int row, int col, vector<string>& chess, int n) {// 检查当前列是否有皇后for (int i 0;…

锐起RDV5高性能云桌面

锐起是上海锐起信息技术有限公司旗下品牌。该公司创立于 2001 年&#xff0c;是桌面虚拟化产品和解决方案提供商&#xff0c;专注于桌面管理系统和私有云存储系统的系列软件产品研发&#xff0c;致力于简化 IT 管理、增强系统安全&#xff0c;提供简单、易用、稳定、安全的产品…

视觉与运动控制6

基于驱动器的控制功能 驱动器的系统性能和运算能力有限需要单独的运动控制器。 V/F恒压频比控制 开环控制方法&#xff0c;应用最广泛、最简单&#xff0c;只需要电机数据即可。适用于控制精度和动态响应要求不高的应用。控制原理&#xff1a;保持点击内磁通量恒定&#xff…