尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
《动态规划:从“傻傻穷举”到“过目不忘”的修仙之路》
递归像“查字典”查一个词发现要先查另一个词另一个词又要查第三个词直到查到最简单的词Base Case才停止。DP 像“考前抱佛脚背书”把查过的词条直接抄在 A4 纸上DP数组考试时直接看纸不用翻书。模块一斐波那契数列递归 vs 记忆化 vs 递推1. 思路讲解Why C在 C 中递归深度过深如n 10000会导致栈溢出Stack Overflow。而且 C 没有 Python 那样的字典dict天然支持我们需要手动开数组。2. 代码详解版本 A纯递归反面教材仅用于理解cppcpp#include iostream using namespace std; int fib(int n) { if (n 1) return n; return fib(n - 1) fib(n - 2); } int main() { cout fib(5) endl; // 5 return 0; }思路最直观的数学定义。缺点时间复杂度 O(2n)存在大量重复计算。版本 B记忆化搜索自顶向下cppcpp#include iostream #include vector using namespace std; int fibHelper(int n, vectorint memo) { // 1. 查表如果算过直接返回 if (memo[n] ! -1) { return memo[n]; } // 2. 计算没算过则计算并存入表中 memo[n] fibHelper(n - 1, memo) fibHelper(n - 2, memo); return memo[n]; } int fib(int n) { if (n 1) return n; // 初始化备忘录-1表示未计算 vectorint memo(n 1, -1); memo[0] 0; memo[1] 1; return fibHelper(n, memo); }思路定义一个memo数组C Vector初始化为-1。进入函数先判断memo[n]是否不为-1如果是直接返回剪枝。否则计算并把结果存进memo[n]。注意这里使用了引用传参​vectorint memo避免数组拷贝的巨大开销。版本 C动态规划自底向上推荐cppcppint fib(int n) { if (n 1) return n; vectorint dp(n 1); // dp[i] 表示第 i 个斐波那契数 dp[0] 0; // Base Case dp[1] 1; // Base Case for (int i 2; i n; i) { dp[i] dp[i - 1] dp[i - 2]; // 状态转移方程 } return dp[n]; }思路从最小的子问题开始一步步构建大问题的解。像织毛衣一样一行一行织上去。模块二爬楼梯理解 DP 数组定义1. 思路讲解这是 DP 定义的经典题。关键在于定义dp[i]的含义爬到第 i 阶楼梯的方法总数。由于每次只能爬 1 或 2 阶所以第 i 阶只能由第 i-1 阶走 1 步或第 i-2 阶走 2 步到达。因此dp[i] dp[i-1] dp[i-2]。2. 代码详解cppcpp#include vector using namespace std; class Solution { public: int climbStairs(int n) { if (n 2) return n; vectorint dp(n 1); // 多开一位防止 n1 时越界 dp[1] 1; // 1阶1种 dp[2] 2; // 2阶2种 (11 或 2) for (int i 3; i n; i) { dp[i] dp[i - 1] dp[i - 2]; } return dp[n]; } };C 坑点如果vectorint dp(n)下标范围是[0, n-1]。如果访问dp[n]会越界。所以通常开n1方便理解。模块三最小路径和二维 DP 入门1. 思路讲解想象一个棋盘dp[i][j]代表从左上角(0,0)走到当前格子(i,j)的最小路径和。要到达(i,j)只能从上方(i-1,j)或左方(i,j-1)过来。所以dp[i][j] grid[i][j] min(dp[i-1][j], dp[i][j-1])。特例第一行只能从左来第一列只能从上来。2. 代码详解cppcpp#include vector #include algorithm using namespace std; class Solution { public: int minPathSum(vectorvectorint grid) { int m grid.size(); int n grid[0].size(); vectorvectorint dp(m, vectorint(n, 0)); // 1. 初始化起点 dp[0][0] grid[0][0]; // 2. 初始化第一列只能从上往下 for (int i 1; i m; i) { dp[i][0] dp[i - 1][0] grid[i][0]; } // 3. 初始化第一行只能从左往右 for (int j 1; j n; j) { dp[0][j] dp[0][j - 1] grid[0][j]; } // 4. 填充剩余格子 for (int i 1; i m; i) { for (int j 1; j n; j) { // 核心取上方和左方的最小值加上当前格子的代价 dp[i][j] grid[i][j] min(dp[i - 1][j], dp[i][j - 1]); } } return dp[m - 1][n - 1]; } };思路拆解vectorvectorint dp(m, vectorint(n, 0));这是 C 创建二维数组的标准方式。初始化边界是新手最容易漏掉的地方漏了就会逻辑错误。谢谢
RELATED

相关推荐

OSPF LSA 4/5/7 实战解析:3类特殊区域配置与LSA过滤效果对比

OSPF LSA 4/5/7 实战解析:3类特殊区域配置与LSA过滤效果对比

OSPF特殊区域实战指南:LSA过滤机制与配置策略深度解析 1. OSPF特殊区域概述与核心价值 在网络工程师的日常工作中,OSPF(Open Shortest Path First)作为最常用的内部网关协议之一,其区域划分和LSA(Link Sta…

📅 2026/9/14 20:53:02
TMC7300与PIC18F45K22的BDC电机控制方案详解

TMC7300与PIC18F45K22的BDC电机控制方案详解

1. 项目概述:TMC7300与PIC18F45K22的BDC电机控制方案在工业自动化、消费电子和机器人领域,有刷直流电机(BDC)因其结构简单、控制方便且成本低廉的特点,仍然是许多应用的首选驱动方案。然而,传统BDC电机控制…

📅 2026/9/17 15:31:21
Claude Code 2026安装指南:CLI环境适配与能力验证

Claude Code 2026安装指南:CLI环境适配与能力验证

1. 项目概述:这不是一个“软件安装”,而是一次AI编码工作流的底层基建 “2026年3月最新|Claude Code保姆级安装教程,一次成功不踩坑”——这个标题里藏着三个被绝大多数人忽略的关键信号: 时间戳(2026年3月…

📅 2026/9/8 5:12:57
MORE NEWS

更多资讯

📰

大模型推理成本暴跌99.7%:技术拆解与低成本部署实战

今年以来,训练侧的光芒逐渐被另一组数字盖过——大模型推理成本在一年内暴跌了约99.7%。这个数字不是我拍脑袋估的,而是从API定价、开源框架吞吐提升和硬件能效变化三者交叉验证得出的行业共识。一年前,调用一次顶级模型的千token价格还能让人…

📰

深度学习艺术风格迁移实战:VGG19与Gram矩阵原理、复现与避坑指南

简介:这是一份面向计算机类毕业设计与课程作业的深度学习艺术风格迁移项目源码包,适合正在学习CNN、损失函数与图像风格迁移的学生参考。项目中用Python或C构建系统,并集成TensorFlow/PyTorch等框架,体现了从数据预处理、模型训练…

📰

基于LangChain与ChatGLM-6B的本地知识库问答系统搭建指南

简介:基于LangChain与ChatGLM-6B等大语言模型构建本地知识库自动问答系统,是面向人工智能开发者与自然语言处理学习者的完整项目实践资源,可解决私有知识检索与智能问答落地问题。资源围绕本地知识库问答场景,涵盖语料切分、向量检…

📰

深入浅出IP协议:从地址规划到静态配置与排障实践

做网络维护的人可能都有这种经历:新设备接进公司网络,第一件事就是问“IP 配了没有”;跨部门联调连不上,先甩过来一句“你 IP 看看是不是写错了”。做了几年网络相关的工作,我最大的体会是,计算机网络里概念…

📰

自由开发者的技术近况:SSE选型、性能优化与排错实战

“想问一下大家现在都在做些什么呢”——这句话我最近在好几个技术社群里都看到过,不是那种寒暄式的随口一问,而是带着一点迷茫、一点好奇、一点想对表的意思。说实话,我自己也经常在深夜盯着屏幕的时候冒出这个念头。做技术这行,…

📰

CC Switch 完全指南:一键切换 Codex 模型服务商与报错排查

如果你最近在用 Codex CLI 这类 AI 编程助手,并且同时接触了两三家大模型服务商的 API,那你大概率已经体会过这种痛苦:换一家供应商,就要去翻配置文件、改 base_url、换 API Key,然后重启终端,运气不好还要…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬