《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题

《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

《Git深度解析》:版本管理实战全解

🌟心向往之行必能至


🎥Cx330🌸的简介:


目录

前言:

01.第N个泰波拉契数

算法原理(动态规划):

思路:

解法代码(C++):

博主手记(字体还请见谅哈):

02.三步问题

算法原理(动态规划):

思路:

解法代码(C++):

博主手记(字体还请见谅哈):

结尾:


前言:

聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力

01.第N个泰波拉契数

题目链接:

1137. 第 N 个泰波那契数 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(动态规划):
思路:

1. 状态表示
这道题可以【根据题目要求】直接定义出状态表示:

dp[i] 表示:第 i 个泰波拉契数的值
2. 状态转移方程
题目已经很贴心的告诉了我们:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
3. 初始化

从我们的递推公式可以看出,dp[i] 在 i=0 以及 i=1 的时候是没有办法进行推导的,因为 dp[-2] 或 dp[-1] 不是一个有效的数据。因此我们需要在填表之前,将 0,1,2 位置的值初始化。题目中已经告诉我们 dp[0] = 0,dp[1] = dp[2] =1

4. 填表顺序
毫无疑问是【从左往右】。
5. 返回值
应该返回 dp[n] 的值。

解法代码(C++):
class Solution { public: int tribonacci(int n) { // //处理边界情况 // if(n==0) return 0; // if(n==1||n==2) return 1; // //1.创建dp表 // vector<int> dp(n+1); // //2.初始化 // dp[0]=0,dp[1]=dp[2]=1; // //3.填表 // for(int i=3;i<=n;i++) // dp[i]=dp[i-3]+dp[i-2]+dp[i-1]; // //4.返回值 // return dp[n]; //空间优化 if(n==0) return 0; if(n==1||n==2) return 1; int a=0,b=1,c=1,d=0; //填表 for(int i=3;i<=n;i++) { d=a+b+c; a=b;b=c;c=d; } return d; } };

空间优化根据滚动数组来进行模拟优化

博主手记(字体还请见谅哈):

02.三步问题

题目链接:

面试题 08.01. 三步问题 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(动态规划):
思路:

1. 状态表示
这道题可以根据【经验+题目要求】直接定义出状态表示:
dp[i] 表示:到达 i 位置时,一共有多少种方法。

2. 状态转移方程
以 i 位置状态的最近的一步,来分情况讨论:
如果 dp[i] 表示小孩上第 i 阶楼梯的所有方式,那么他应等于所有上一步的方式之和:

  • 上一步上一级台阶:dp[i] += dp[i-1]
  • 上一步上两级台阶:dp[i] += dp[i-2]
  • 上一步上三级台阶:dp[i] += dp[i-3]

综上所述,dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
需要注意的是,这道题目说,由于结果可能很大,需要对结果取模。

在计算的时候,三个值全部加起来再取模是不行的,大家可以自己取试试。对于这类问题,我们每计算一次(两个数相加/乘等),都需要取一次模。否则,万一发生了溢出,我们的答案就错了。

3. 初始化
从我们的递推公式可以看出,dp[i] 在 i=0,i=1 以及 i=2 的时候是没有办法进行推导的,因为 dp[-3] dp[-2]  dp[-1] 不是一个有效的数据。

因此我们需要在填表之前,将 1,2,3 位置的值初始化。
根据题意,dp[1] = 1,dp[2] = 2,dp[3] = 4

4. 填表顺序
毫无疑问是【从左往右】。
5. 返回值
应该返回 dp[n] 的值。

解法代码(C++):
class Solution { const int MOD=1e9+7; public: int waysToStep(int n) { // if(n==1||n==2) return n; // if(n==3) return 4; // //1.创建dp表 // vector<int> dp(n+1); // //2.初始化 // dp[1]=1,dp[2]=2,dp[3]=4; // //3.填表 // for(int i=4;i<=n;i++) // dp[i]=((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD; // return dp[n]; //空间优化 if(n==1||n==2) return n; if(n==3) return 4; int a=1,b=2,c=4,d=0; //填表 for(int i=4;i<=n;i++) { d=((a+b)%MOD+c)%MOD; a=b;b=c;c=d; } return d; } };
博主手记(字体还请见谅哈):

结尾:

总结:本文分享了两个动态规划算法题的解题思路与代码实现。第一个是第N个泰波拉契数问题,通过状态转移方程dp[i]=dp[i-1]+dp[i-2]+dp[i-3]求解,并给出了空间优化方案。第二个是三步问题,分析上台阶的不同方式得出状态转移方程dp[i]=dp[i-1]+dp[i-2]+dp[i-3],强调取模运算的重要性。两题都采用从左往右填表顺序,并提供C++实现代码及空间优化版本

Read more

在普通电脑上跑大模型?!llama.cpp 实战指南(真·CPU救星)

文章目录 * 🤯 为什么你需要关注llama.cpp? * 🚀 手把手实战:十分钟跑通模型 * 第一步:准备战场环境 * 第二步:获取模型文件(关键!) * 第三步:启动模型交互! * 🛠️ 高级玩法解锁 * 💡 我的深度体验报告 * 👍 真香时刻 * 🤔 遇到的坑 * 🌟 超实用场景推荐 * 🔮 未来展望:CPU的逆袭? 还在为没显卡跑不动AI模型发愁?这个开源项目让我的旧笔记本起死回生了! 朋友们!今天要分享一个让我拍桌子叫绝的开源神器——llama.cpp。当初看到这个项目时我整个人都惊呆了:纯C++实现!不需要GPU!普通CPU就能跑! 作为一个常年被显卡价格PUA的程序员,这简直是救命稻草啊! 🤯 为什么你需要关注llama.cpp? 先说说我踩过的坑吧。去年想在家折腾开源大模型,结果: * 显卡要求动不动就16G显存(我的1060直接哭晕) * 装依赖环境能折腾一整天(Python版本地狱啊!) * 跑个7B模型风扇像直升机起飞(邻居以为我在挖矿) 直到发现了Georgi Gergan

By Ne0inhk
如何降低AIGC总体疑似度?7个实用技巧+专业工具真实案例分享

如何降低AIGC总体疑似度?7个实用技巧+专业工具真实案例分享

为什么你的论文总是被标为AIGC疑似? 近年来,随着AI写作工具的普及,一个让无数研究者头疼的问题出现了——AIGC总体疑似度过高。根据各大高校的最新规定,如果论文的AIGC率超过30%,很可能被判定为AI代写,直接取消答辩资格! 根据高校规定,AIGC率超过30%可能被判定为学术不端,面临取消答辩资格的风险。 许多同学反映:"我只是用AI辅助写作,怎么就被判定为学术不端了?" 这背后的原因是AI生成内容具有特定的规律性特征,如固定句式、高频词汇组合等,这些"数字指纹"很容易被检测系统识别。 7个实用降重技巧,亲测有效! 1. 变换表达,重构句式 避免使用AI常见的短句结构,如"首先,"、"综上,"等。将这些碎片化表达整合成完整句子。 示例对比: * 改前:综上所述,研究者们普遍认为企业偿债能力是一个多维度的概念。 * 改后:总之研究人员普遍认同企业偿债能力这一多维度概念。 2. 引入具体数据和案例 通过添加真实的研究数据、

By Ne0inhk

亲测Meta-Llama-3-8B-Instruct:英语对话效果超预期体验分享

亲测Meta-Llama-3-8B-Instruct:英语对话效果超预期体验分享 1. 引言:为何选择 Meta-Llama-3-8B-Instruct? 在当前开源大模型快速迭代的背景下,如何在有限算力条件下实现高质量的英文对话能力成为许多开发者关注的核心问题。Meta 于 2024 年 4 月发布的 Meta-Llama-3-8B-Instruct 模型,凭借其 80 亿参数规模、指令微调优化和 Apache 2.0 可商用协议,迅速成为轻量级部署场景下的热门选择。 本文基于实际部署与测试经验,重点分享使用 vLLM + Open WebUI 构建的推理服务中,该模型在英语对话任务中的表现。通过真实交互案例、性能分析与配置建议,帮助读者判断其是否适合作为英文客服、教育辅助或代码助手等应用场景的技术底座。 值得一提的是,该模型对中文支持较弱,若需中文能力,建议进行额外微调或选用其他多语言优化版本。 2. 模型核心特性解析 2.1 参数规模与硬件适配性 Meta-Llama-3-8B-Instruct 是一个全连接(Dense)结构的 80

By Ne0inhk
【OpenAI】【干货】DALL·E 2全方位教程:零基础快速上手AI图像生成与应用优势解析获取OpenAI API KEY的两种方式,开发者必看全方面教程!

【OpenAI】【干货】DALL·E 2全方位教程:零基础快速上手AI图像生成与应用优势解析获取OpenAI API KEY的两种方式,开发者必看全方面教程!

【干货】DALL·E 2详细教程+应用优势全解析!零基础也能玩转AI图像生成🔥 引言:你真的了解DALL·E 2吗?AI绘画的未来就在这里! 你有没有想过,只用一句话描述,就能生成一幅栩栩如生的图像?这不是科幻,而是DALL·E 2带给我们的现实。作为OpenAI推出的革命性文本生成图像模型,DALL·E 2正在颠覆设计、广告、教育、游戏等多个行业的创作方式。 我有个朋友小李,是一名平面设计师。以前他每天都要花大量时间构思和绘制草图,常常加班到深夜。自从他开始用DALL·E 2,只需输入简单的文字描述,几秒钟内就能获得多张高质量设计稿,灵感和效率双双爆棚!这背后的秘密,就是DALL·E 2强大的AI能力。 今天,我将带你深入了解DALL·E 2的应用优势,并手把手教你如何用Python调用API,快速生成属于你的专属图像。无论你是设计新手,还是技术大咖,都能从中获得实用干货,开启AI创作新时代!🚀 目录

By Ne0inhk