2024国赛C题:用线性规划求解农作物种植策略
简介一份面向2024年全国大学生数学建模竞赛C题参赛者的完整获奖方案聚焦农作物的种植策略优化。内容基于2023年数据围绕土地分区、作物轮作与季节性等多重约束运用贪心算法与优先队列构建高效求解流程并引入价格弹性与间作分析让方案在贴近实际的同时具备清晰的可复现路径适合备赛学生及对优化建模感兴趣的读者研习。压缩包共296个文件约12.5MB结构分层明确231个JSON文件保存输入数据与运行结果32个TXT记录说明与过程信息21个XLSX表格汇总产量、收益等核心数据4个PY脚本实现算法主体1篇PDF论文提供完整思路与写作范本另有XML和MD文件补充配置与说明。已有232人学习下载读者可对照论文拆解一等奖模型框架运行代码复现贪心选择与优先队列排序过程并学习在复杂农业约束下进行价格弹性分析和间作策略设计的完整方法。1. 2024国赛C题怎么读这不是产量预测题而是一道带约束的线性规划题拿到2024年国赛C题《农作物的种植策略》的那一刻大多数人会先被那几张写满亩产量、单价、成本和预期销量的Excel表带走节奏误以为这是一道预测题。但你把题目读完就会发现它的任务根本不是“预测今年玉米能收多少斤”而是在地块面积、轮作要求、销售上限都给定的大前提下回答一个更实际的问题种什么、种多少、种在哪才能让利润最大化。这是一道典型的线性规划应用场景目标函数是利润约束条件来自土地、市场需求和种植习惯。很多队伍把80%的精力花在预测2024年销量上最后引入线性规划求解器一跑发现预测值只能微调结果不能改变格局。真正拉开一等奖和优胜奖差距的是建模完整度、约束贴合度以及论文里对参数和结论的论证深度。这篇笔记直接按拿奖标准拆一遍从数据处理到scipy线性规划求解再到论文要害全部落到可以复现的细节层面。2. 把种植策略翻译成优化模型变量、目标函数与约束条件的完整映射2.1 原题数据里到底有几个维度开始建模之前先不要把数据当成一张平面表。这道题的数据至少叠了四个维度地块维度、作物维度、年份维度和季节维度。地块不是同质的题目里既有普通地块也有智慧大棚面积不同土质条件也有差异作物维度更复杂每种作物有自己的亩产量、销售单价、种植成本还分单季和双季年份维度决定了周期性约束比如重茬和轮作季节维度意味着同一块地一年内可能被利用两次。这四个维度叠加在一起你手里其实是一份四维参数表。很多队伍折在这里他们把“地块-作物-年份”做成交叉表把季节信息合并成年度均值结果模型一求解出现“同一块地同一年既种小麦又种玉米”的荒谬答案。我的做法是先列一张维度清单标清楚每个参数的粒度是“每年”还是“每季”。这道题的销售预期通常给到年度而种植面积按季次调度所以模型必须同时支撑这两个时间粒度否则后面会非常被动。2.2 决策变量的选取从三维展开到一维索引决策变量是整个模型的地基。我建议用“地块×作物×年份”作为基础变量骨架记为 x[i][j][t]含义是第 i 块地、第 j 种作物、第 t 年的种植面积。如果题目明确区分季次就把“年份”扩展成“季次”即 x[i][j][s][t]s 代表第几季。这样定义的好处是目标函数里的每种作物每块地的利润可以直接相乘相加约束矩阵的每一行也能清晰对应到一条业务规则。不过求解器不认识三维数组或四维数组scipy.optimize.linprog 只吃一维向量。所以落地时需要把多维索引展平成一维。展平顺序决定了后续写约束矩阵的难易程度我一般采用“地块维度最外层、年份维度最内层”的顺序即 index 地块序号×作物数×年数 作物序号×年数 年份序号。这个顺序能让同一地块、同一作物的变量在向量里紧挨着约束写成矩阵时规律特别明显排查问题也方便。2.3 目标函数与四组约束条件的数学写法目标函数写起来直接每种作物每块地的净利润等于“亩产量×销售单价−亩均成本”然后用净利润乘以种植面积对所有地块、作物、年份求和。注意 linprog 默认求解的是最小化问题所以要把利润目标取负号传进去这是新手最容易忽略的一步。约束条件我按来源拆成四组。第一组是地块面积约束同一块地在同一时段内所有作物的种植面积之和不能超过该地块可用面积。第二组是销售上限约束某作物某年的总产量不能超过当年预期销量换算方式是该作物种植总面积 × 亩产量 ≤ 预期销量。第三组是轮作或重茬约束这个需要另加逻辑变量或按地块分组处理后面细说。第四组是非负约束和可选的二进制约束。这四组约束缺一组求解结果就会出现明显违背常识的分配。2.4 轮作约束如何处理最容易被忽略的隐性条件题目里对“同一作物能否在同一块地上连续种植”通常有明确说法比如某些作物不能重茬。处理这个约束常见做法是把“每年每块地种什么”这个连续性信息纳入判断如果第 t 年某地块种了作物 A则第 t1 年该地块不能继续种 A。严格建模需要引入0-1变量来表示“是否种植”在 scipy 里可以用整数线性规划的 milp 接口处理。如果不引入整数变量也可以通过“分区域轮作”来近似——把地块按年切块规定同一地块内单一作物至少间隔一年种植。我个人的习惯是先不加轮作约束跑一遍线性规划把“每种作物每年每块地的最优面积”打印出来看一眼有没有明显连作。如果有再决定是加二进制变量还是做轮作分组。这个顺序能帮你判断到底是哪个约束在实际起作用而不是一上来就把模型做成黑匣子。3. 数据预处理与参数估计结果可信度取决于这一步而不是求解器3.1 销量预测的尺度精确到个位数反而没有意义题目通常只给到2023年的实际销量或2024年的预期销量范围要算2024到2030年的策略必须把未来年份的预期销量补出来。这里的重点不是预测精度而是量级。因为销量最终只是转换成种植面积上限上下浮动10%很多时候根本不会改变最优解的结构。常见做法是对每一种作物用前几年的销量做简单线性回归或者直接按固定增长率外推再给一个±5%到±10%的波动区间。这个区间不是用来做第二套预测的而是留给后面敏感性分析用的。我个人反对在C题里上ARIMA、LSTM这类时间序列模型。原因很实际国赛的数据量通常只有三五个年份深度学习模型在这里既没有数据支撑也没有解释性。评委看重的是你能不能讲清楚“为什么用这个增长率、这个区间怎么定”而不是模型的名字有多高级。3.2 把成本拆到亩均口径综合成本不能直接用题目给的成本数据经常是一个总量比如“某作物全年总成本”但目标函数里需要的是“亩均成本”。换算公式是亩均成本 该作物全年总成本 ÷ 该作物当年种植总面积。这里有个很隐蔽的坑如果某作物成本明细里包含了固定投入比如大棚维护费、灌溉设施折旧直接按面积分摊到每一亩反而会高估单位成本导致模型避开这些作物。处理方式是先看题目的成本口径如果题目把成本分成固定部分和可变部分建模时只把可变成本放进目标函数固定成本放到论文的讨论部分单独分析。3.3 智慧大棚与普通地块不能共用一套参数智慧大棚的亩产、单价、成本和种植批次与普通地块完全不同。很多队伍把所有地块行合并成一张“地块均值表”模型跑出来普通地块上全是高利润作物智慧大棚反而闲置。问题就出在参数混用。我的建议是把地块分成两个独立集合普通地块一组参数智慧大棚一组参数变量编号从两组分别生成。这样处理约束矩阵会多出几行但对求解器来说无非是多几个约束换来的是结果在业务上完全合理。4. 用 Python scipy 实现核心求解代码可直接改写成题目规模的最小骨架4.1 最小可运行示例3块地、5种作物、3年下面这段代码是完整的可运行骨架规模压缩到3块地、5种作物、3年。你只需要把数组扩展成题目真实规模比如6块地、二十多种作物、7年然后替换参数来源即可。import numpy as np from scipy.optimize import linprog # 基础参数3块地、5种作物、3年 n_land 3 n_crop 5 n_year 3 n_vars n_land * n_crop * n_year land_area np.array([100.0, 80.0, 60.0]) # 每块地可用面积亩 # 每块地、每种作物的亩产量斤/亩 yield_per_acre np.array([ [400, 500, 350, 420, 300], [380, 480, 360, 410, 310], [420, 510, 340, 430, 290], ]) # 每种作物的销售单价元/斤 price np.array([3.0, 2.5, 4.0, 3.2, 5.0]) # 每种作物的亩均成本元/亩注意要按上一章口径反推 cost_per_acre np.array([800.0, 700.0, 900.0, 750.0, 600.0]) # 每种作物每年的预期销量上限斤 sale_limit np.array([50000, 60000, 45000, 55000, 40000]) profit_per_acre yield_per_acre * price - cost_per_acre # 形状 n_land x n_crop4.2 构造目标函数系数与约束矩阵# linprog 默认求最小化利润最大化等价于 -利润 最小化 c [] for l in range(n_land): for cr in range(n_crop): for yr in range(n_year): c.append(-profit_per_acre[l][cr]) c np.array(c) A_ub [] b_ub [] # 约束1同一地块、同一年份所有作物的种植面积之和不能超过地块面积 for l in range(n_land): for yr in range(n_year): row np.zeros(n_vars) for cr in range(n_crop): idx l * n_crop * n_year cr * n_year yr row[idx] 1 A_ub.append(row) b_ub.append(land_area[l]) # 约束2每种作物每年的总产量不能超过预期销量 for cr in range(n_crop): for yr in range(n_year): row np.zeros(n_vars) for l in range(n_land): idx l * n_crop * n_year cr * n_year yr row[idx] yield_per_acre[l][cr] # 注意这里是产量系数 A_ub.append(row) b_ub.append(sale_limit[cr]) A_ub np.array(A_ub) b_ub np.array(b_ub) bounds [(0, None) for _ in range(n_vars)] # 使用 HiGHS 内点法求解scipy 1.9 默认 res linprog(c, A_ubA_ub, b_ubb_ub, boundsbounds, methodhighs) x res.x.reshape(n_land, n_crop, n_year) print(求解状态:, res.status) print(最大利润:, -res.fun) for yr in range(n_year): print(f\n第 {yr1} 年种植方案:) for l in range(n_land): for cr in range(n_crop): if x[l][cr][yr] 1e-6: print(f 地块{l1} 作物{cr1} 种植 {x[l][cr][yr]:.1f} 亩)代码的核心逻辑在约束矩阵的构造部分。约束1的每一行对应“某地块某年份的种植面积合计”系数全部为1右边项是地块面积约束2的每一行对应“某作物某年份的产量合计”系数是该地块该作物的亩产量右边项是销量上限。这种按“每变量一行系数”的构造方式比用循环累加更直观也更不容易漏行。变量展平顺序与前面建模部分完全一致所以约束行的索引可以直接对应回三维语义出错了也好定位。4.3 求解完成之后的第一件事检查松紧状态求解器返回的不只是最优解还带一组很有价值的信息每个约束对应的松弛变量。松弛变量为0的约束说明这个限制条件真正“卡住”了方案松弛变量远大于0的约束说明这个条件在最优解下根本没触顶。拿到结果后第一件事就是把每个约束的松弛量打印出来看一眼。如果某块地的面积约束全部松弛说明这块地种满反而不优可能是作物被销量上限锁死了如果某种作物的销量约束全部松弛说明它利润太低或产量太高市场完全吃不下。这些信息就是你论文里“结果分析”一章的素材评委非常看重这种深度解读。5. 求解过程常见的5个翻车细节现象、原因与解决5.1 所有地块都闲置模型返回全零解现象求解器正常收敛但所有种植面积都是0利润为0。原因目标函数系数符号弄反了——linprog默认求最小化你把利润直接传成了正数求解器自然选择什么都不种。解决检查目标函数向量c确保传的是负的净利润。同时检查价格乘产量后是否大于成本如果某作物净利润为负它本来就该是0。5.2 同一块地同一年出现两种作物且面积之和超出地块面积现象结果里地块1第1年同时种了三种作物面积加起来超过了地块面积。原因约束矩阵漏了“地块-年份”行或者循环里的索引跳过了某些变量组合。解决用第4章代码里的双层循环方式重新构造约束打印A_ub的行和列检查是否每行都覆盖全部相关变量。一个有效的自查办法是把A_ub每一行求和如果某一行系数和小于该行应有的变量数量说明有变量没进该行。5.3 高利润作物在每块地上都种到销量上限完全无视轮作现象最优解把所有利润最高的作物填满每一块地。原因模型里没有轮作约束线性规划只会找局部最优的暴力解。解决回到2.4节的决定——要么加二进制变量做整数规划要么做轮作分组。国赛环境下我建议先接受这个结果然后在论文里明确说明“当前模型未考虑重茬实际生产中需配合轮作制度再调整”同时做一版“人为限制同地块连续两年不种同一种作物”的对比实验展示调整后的利润损失。这样做反而能体现你对模型边界的清楚认知。5.4 求解器返回“不可行”或“无界”现象status字段返回2不可行提示行约束冲突。原因销量上限折合面积后小于地块面积。比如某地块100亩某作物预期销量折合面积只有30亩剩余70亩又被其他作物的销量上限锁死就无解了。解决把估计的销量数据逐个检查尤其是那些销量特别小的作物。要么放宽销量下限要么在模型里把“销量”理解为“至少种这么多”和“至多种这么多”的双向约束而不是单向上限。5.5 求解时间越来越长变量过万就跑不动了现象把数据扩展到真实题目规模后变量数过万scipy跑了几分钟没结果。原因直接用Python循环逐条构造矩阵效率太低另外也可能没有指定求解器默认方法在大型稀疏问题上表现不佳。解决改用scipy 1.9以上版本并指定methodhighs同时用稀疏矩阵scipy.sparse矩阵构造约束不要用密集numpy矩阵。经验值20000个变量以内HiGHS基本秒级求解如果超过这个数考虑压缩合并同类作物或者把连续年份分段求解再拼接。6. 从“能跑通”到“一等奖”敏感性分析、合理性检验与论文呈现代码跑通只是及格线一等奖的差距体现在你如何向评委证明“这个结果是靠谱的”。我自己带队伍时反复强调三件事第一把参数做敏感性分析。对销售单价、产量、亩均成本分别做±5%、±10%的扰动重新求解记录最优利润和种植结构的变化幅度。如果利润变化很小说明模型对参数不敏感结论稳健如果利润变化剧烈说明答案依赖某些拍脑袋定的参数你得在论文里主动解释这个风险。第二检验结果在业务上的合理性。把最优解折算成总产量、总成本、总收入和题目里给的历年实际数据放在同一张表里对比。如果计算出来的亩均收入远高于当地实际水平说明成本参数可能漏了项目如果某些作物始终没出现在最优解里要说明是因为利润太低还是销量受限。这些细节会直接向评委证明你真的读懂了自己的模型。第三论文里不要只贴一堆图表而是在每张图下面用两三行文字解读“这个图说明什么、为什么会出现这个现象”。尤其是敏感性分析的结果评委最希望看到的是你主动承认哪些地方依赖假设。用第一人称的建模决策过程去组织论文比如“这里我放弃了复杂的ARIMA销量预测原因是未来三个季度的销量不确定性远大于简单线性外推的误差”这种表述比罗列公式更能打动评委。最后我养成了一个习惯每次提交论文前让队伍里另一个人独立地把模型代码重跑一遍只提供数据文件和代码不给任何解释。如果这个人能顺着注释跑通并复现论文里每一个数字这份代码才算合格。这样做虽然很费时间但能拦下大量“参数抄错”“图画错axis”的低级失误对国赛这种每分钟都在考验细节的场景这项检查值回票价。希望这篇笔记能帮你少走几步弯路从模型到论文都能按你真正理解的方式落地。本文还有配套的精品资源点击获取

相关新闻

Vector v0.47.0 版本特性深度解析:OTLP 指标接入、window 降噪变换与全新 MQTT 源

Vector v0.47.0 版本特性深度解析:OTLP 指标接入、window 降噪变换与全新 MQTT 源

可观测性数据工程数据集成日志分析 【免费下载链接】vector A high-performance observability data pipeline. 项目地址: https://gitcode.com/GitHub_Trending/vect/vector 点击查看 免费下载 Vector 在 2025-05-20 发布了 0.47.0 版本,这是观测性数据…

2026/10/11 20:12:06 阅读更多 →
YOLOv5 VOC2007开箱即用目标检测最小可行系统

YOLOv5 VOC2007开箱即用目标检测最小可行系统

简介:本资源是一套开箱即用的YOLOv5目标检测实践项目,面向计算机视觉初学者、AI课程设计者及算法工程师,聚焦人物与动物两类典型目标的端到端识别任务。资源包含完整PyTorch实现代码、预配置数据处理脚本(如voc_annotation.py、km…

2026/10/11 20:30:29 阅读更多 →
Podman 中的 containerd errdefs 依赖解析:统一错误分类、检测与 HTTP 映射实战指南

Podman 中的 containerd errdefs 依赖解析:统一错误分类、检测与 HTTP 映射实战指南

容器运行时云原生CLI 【免费下载链接】podman Podman: A tool for managing OCI containers and pods. 项目地址: https://gitcode.com/gh_mirrors/po/podman 点击查看 免费下载 导读:errdefs 是 containerd 子项目提供的一个 Go 错误定义与检测库&…

2026/10/11 20:50:16 阅读更多 →

最新新闻

Python后端中间件专题15:一条坏消息堵住整条队列——有限重试、DLQ 与重放

Python后端中间件专题15:一条坏消息堵住整条队列——有限重试、DLQ 与重放

Python后端中间件专题15:一条坏消息堵住整条队列——有限重试、DLQ 与重放 值班人员收到一条“通知队列持续失败”告警。如果 Worker 没有终点,一条缺字段的 JSON 会被反复投递,占用执行槽并刷屏日志。如果直接 ACK 并丢弃,现场证…

2026/10/12 3:48:18 阅读更多 →
数据库学生成绩管理系统课程设计:从E-R图到SQL实现全攻略

数据库学生成绩管理系统课程设计:从E-R图到SQL实现全攻略

简介:一份以SQL Server 2008与VC6.0为开发环境的学生成绩管理系统数据库课程设计报告,适合计算机、软件工程等专业学生在数据库课程设计、毕业设计或实训中参考。报告从课题背景与需求分析出发,完整覆盖概念设计(E-R模型&#xff…

2026/10/12 3:48:18 阅读更多 →
Python GIL 深度解析:从多线程翻车到并行方案

Python GIL 深度解析:从多线程翻车到并行方案

我第一次在 Python 里正儿八经写并发的时候,一度怀疑是电脑坏了。任务很简单:8 个线程分别跑一段纯 CPU 计算,按道理就算不跑满 8 核,至少也比单线程快个三四倍吧。结果 8 个线程跑完的时间不但没变短,反而比串行还慢了…

2026/10/12 3:48:18 阅读更多 →
Dev Container 并行生命周期脚本执行:object 语法原理、规范与实战

Dev Container 并行生命周期脚本执行:object 语法原理、规范与实战

开发工具 【免费下载链接】spec Development Containers: Use a container as a full-featured development environment. 项目地址: https://gitcode.com/gh_mirrors/spec2/spec 点击查看 免费下载 导读 本文围绕 Development Container Specification&#xff0…

2026/10/12 3:48:18 阅读更多 →
LangChain检索与文档:文档加载、切分、向量化与检索调优实践

LangChain检索与文档:文档加载、切分、向量化与检索调优实践

1. 从模型对话到检索增强:为什么这块值得单独拎出来讲如果你已经跟着这个系列用 LangChain 搭过几次基本对话链,大概率会产生一个疑惑:模型生成能力都这么强了,上下文窗口也越做越大,为什么还要搞一套"检索与文档…

2026/10/12 3:48:17 阅读更多 →
Visual Studio Code 1.53(2021 年 1 月)更新全解:工作台、调试、Notebook 与扩展 API 深度指南

Visual Studio Code 1.53(2021 年 1 月)更新全解:工作台、调试、Notebook 与扩展 API 深度指南

文档教程 【免费下载链接】vscode-docs Public documentation for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-docs 点击查看 免费下载 本文全面解读 VS Code 2021 年 1 月发布的 1.53 版本(对应仓库文档 release-notes/v…

2026/10/12 3:47:17 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →