<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[QY8765的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/QY8765</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; QY8765]]></copyright><item><title><![CDATA[二分图最小边覆盖：原理、算法与代码实现]]></title><link>https://blog.csdn.net/QY8765/article/details/166008621</link><guid>https://blog.csdn.net/QY8765/article/details/166008621</guid><author>QY8765</author><pubDate>Sat, 19 Sep 2026 15:39:57 +0800</pubDate><description><![CDATA[二分图最小边覆盖的核心思路是借助最大匹配来求解：先通过匈牙利算法找到最大匹配，再为所有未被匹配覆盖的顶点补充边，即可得到最小边覆盖。理解「最小边覆盖数 = 顶点数 - 最大匹配边数」这一关键等式，是掌握该问题的钥匙。希望本文的原理讲解和代码实现能帮助你快速上手这一经典算法。]]></description><category></category></item><item><title><![CDATA[二分图最大独立集：从概念到求解方法]]></title><link>https://blog.csdn.net/QY8765/article/details/166008577</link><guid>https://blog.csdn.net/QY8765/article/details/166008577</guid><author>QY8765</author><pubDate>Sat, 19 Sep 2026 15:39:09 +0800</pubDate><description><![CDATA[二分图最大独立集问题通过 König 定理转化为最大匹配问题，从而可以在多项式时间内高效求解。核心步骤是：先求最大匹配，再构造最小点覆盖，最后取补集得到最大独立集。掌握这一转化思路，不仅能够解决最大独立集问题，还能举一反三地处理最小点覆盖、最大匹配等一系列等价问题。]]></description><category></category></item><item><title><![CDATA[二分图最小点覆盖：从概念到算法实现]]></title><link>https://blog.csdn.net/QY8765/article/details/166008564</link><guid>https://blog.csdn.net/QY8765/article/details/166008564</guid><author>QY8765</author><pubDate>Sat, 19 Sep 2026 15:38:42 +0800</pubDate><description><![CDATA[二分图最小点覆盖是图论中一个优雅而实用的问题。借助柯尼希定理，我们将它转化为最大匹配问题，并通过匈牙利算法高效求解。理解这一转化过程，不仅有助于掌握二分图的核心性质，也能为解决实际工程中的组合优化问题提供有力工具。]]></description><category></category></item><item><title><![CDATA[二分图最大带权匹配：原理、算法与实现]]></title><link>https://blog.csdn.net/QY8765/article/details/166008596</link><guid>https://blog.csdn.net/QY8765/article/details/166008596</guid><author>QY8765</author><pubDate>Sat, 19 Sep 2026 15:38:19 +0800</pubDate><description><![CDATA[给定一个二分图 G = (X, Y, E)，其中 X 和 Y 是两个不相交的顶点集合，E 是连接 X 与 Y 的边集合，每条边 e 带有一个权重 w(e)。二分图最大带权匹配的目标是：选择一组两两不共享端点的边，使得所选边的权重总和最大。无权匹配：所有边权重相同，等价于求最大基数匹配。带权匹配：边权不同，需要最大化权重总和，即最大带权匹配。当 X 与 Y 的顶点数相等且要求完美匹配时，问题退化为经典的指派问题（Assignment Problem）。]]></description><category></category></item><item><title><![CDATA[二分图最大匹配：从匈牙利算法到实际应用]]></title><link>https://blog.csdn.net/QY8765/article/details/166008590</link><guid>https://blog.csdn.net/QY8765/article/details/166008590</guid><author>QY8765</author><pubDate>Sat, 19 Sep 2026 15:37:44 +0800</pubDate><description><![CDATA[匹配（Matching）是指图中一组边的集合，其中任意两条边都没有公共顶点。也就是说，每个顶点在匹配中最多只能与一条边相关联。二分图最大匹配是图论中的基础且重要的问题，匈牙利算法以其简洁的实现和良好的实用性成为解决该问题的首选方法。理解增广路径的核心思想，掌握算法的实现细节，对于深入学习和应用图论知识具有重要意义。希望本文能够帮助读者建立起对二分图最大匹配的完整认识。]]></description><category></category></item><item><title><![CDATA[二分图：从定义到判定与匹配的完整指南]]></title><link>https://blog.csdn.net/QY8765/article/details/166008555</link><guid>https://blog.csdn.net/QY8765/article/details/166008555</guid><author>QY8765</author><pubDate>Sat, 19 Sep 2026 15:37:26 +0800</pubDate><description><![CDATA[二分图（Bipartite Graph），又称二部图，是图论中的一类特殊图。它的定义是：设图 G = (V, E) 是一个无向图，如果顶点集 V 可以划分为两个互不相交的子集 A 和 B，使得图中每条边的两个端点分别属于 A 和 B，则称图 G 为二分图。换句话说，二分图中的所有边都连接着两个不同集合中的顶点，同一个集合内部的顶点之间不存在边。学生选课：学生和课程分别构成两个集合，边表示选课关系。任务分配：工人和任务构成两个集合，边表示工人能胜任该任务。社交网络。]]></description><category></category></item><item><title><![CDATA[调整法(详解）]]></title><link>https://blog.csdn.net/QY8765/article/details/165226141</link><guid>https://blog.csdn.net/QY8765/article/details/165226141</guid><author>QY8765</author><pubDate>Sun, 13 Sep 2026 13:26:59 +0800</pubDate><description><![CDATA[调整法是一种通过系统性调整关键参数、流程或结构来优化结果的方法论。它强调在已有方案的基础上，通过小步快跑、持续迭代的方式，逐步逼近最优解。调整法是一种实用且高效的优化方法，其核心在于系统化、可验证的迭代过程。掌握调整法，能够帮助我们在复杂问题中保持清晰的思路，稳步提升结果质量。]]></description><category></category></item><item><title><![CDATA[正难则反：逆向思维在算法与工程中的妙用]]></title><link>https://blog.csdn.net/QY8765/article/details/165225966</link><guid>https://blog.csdn.net/QY8765/article/details/165225966</guid><author>QY8765</author><pubDate>Sun, 13 Sep 2026 13:25:00 +0800</pubDate><description><![CDATA[正难则反」指的是：当从正面直接求解遇到困难时，转而从问题的对立面、补集或反向过程入手，通过求解反向问题来间接得到原问题的答案。其核心在于，把「求什么」转化为「不求什么」，把「正向推导」转化为「反向排除」。这一策略的底层逻辑是：很多问题的正面状态空间巨大，而反面状态空间往往小得多，或者反面条件更容易刻画。通过计算补集、逆向遍历、反向推导，常常能大幅降低复杂度。「正难则反」不是一种固定的算法，而是一种思维习惯。它提醒我们：当正面路径走不通时，不要死磕，试着站到问题的反面去看。]]></description><category></category></item><item><title><![CDATA[前缀和优化动态规划：从原理到实战]]></title><link>https://blog.csdn.net/QY8765/article/details/164402688</link><guid>https://blog.csdn.net/QY8765/article/details/164402688</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:41:00 +0800</pubDate><description><![CDATA[转移方程呈区间枚举形式：内层循环枚举的 j 来自一个连续区间。代价函数可分离cost(j, i)能拆成的形式，交叉项不存在或可以单独处理。区间端点单调：随着 i 增大，j 的可行区间也单调移动，便于用前缀结构维护。如果交叉项无法分离，则需要考虑斜率优化或四边形不等式优化；如果区间端点不单调，则需要使用线段树或树状数组维护。前缀和优化 DP 的核心在于「把内层枚举转化为前缀查询」。]]></description><category></category></item><item><title><![CDATA[线段树优化 DP：从原理到实战]]></title><link>https://blog.csdn.net/QY8765/article/details/164402695</link><guid>https://blog.csdn.net/QY8765/article/details/164402695</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:40:13 +0800</pubDate><description><![CDATA[线段树优化 DP 的核心，是把「区间最值查询」从 O(n) 降到 O(log n)，从而把整体复杂度从 O(n²) 优化到 O(n log n)。它的适用场景是转移方程中需要查询动态区间的最值，且区间端点随状态变化。掌握这一技巧，需要同时熟悉线段树的建树、查询、更新三个基本操作，并理解 DP 状态与线段树下标之间的映射关系。建议读者先手写一遍 LIS 的线段树版本，再尝试区间调度类问题，逐步体会这种优化的通用性。]]></description><category></category></item><item><title><![CDATA[概率DP：从入门到实战]]></title><link>https://blog.csdn.net/QY8765/article/details/164402677</link><guid>https://blog.csdn.net/QY8765/article/details/164402677</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:37:57 +0800</pubDate><description><![CDATA[概率DP（Probability Dynamic Programming）是动态规划的一个重要分支，其核心思想是在状态转移过程中引入概率，通过期望或概率的递推关系来求解问题。与普通DP不同，概率DP的状态转移往往带有随机性，需要根据事件发生的概率来计算期望值或到达某个状态的概率。期望问题：求某个随机过程到达目标状态所需的期望步数、期望代价等。概率问题：求某个事件发生的概率，例如在若干次随机操作后处于某个状态的概率。博弈问题：双方轮流操作，每次操作带有随机性，求最优策略下的胜率或期望收益。]]></description><category></category></item><item><title><![CDATA[动态DP：从树形动态规划到动态规划的动态规划]]></title><link>https://blog.csdn.net/QY8765/article/details/164402667</link><guid>https://blog.csdn.net/QY8765/article/details/164402667</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:36:30 +0800</pubDate><description><![CDATA[动态 DP 是「DP 的 DP」：外层用数据结构维护内层 DP 的转移矩阵。把 DP 转移写成广义矩阵乘法形式。用树链剖分把树拆成重链，用线段树维护链上矩阵乘积。修改时沿重链向上更新，查询时合并链间结果。掌握动态 DP，不仅需要扎实的 DP 基础，还需要对树链剖分、线段树和矩阵运算有深入理解。建议读者从「树上最大权独立集」入手，逐步扩展到「树上最大权路径」「动态树上背包」等更复杂的问题。]]></description><category></category></item><item><title><![CDATA[计数DP：从入门到实战]]></title><link>https://blog.csdn.net/QY8765/article/details/164402593</link><guid>https://blog.csdn.net/QY8765/article/details/164402593</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:35:36 +0800</pubDate><description><![CDATA[计数DP（Counting Dynamic Programming）是一类以「统计方案数」为目标的动态规划问题。与最优化DP求最大值、最小值不同，计数DP的核心是计算满足某种条件的方案总数，通常需要借助组合数学、状态设计和递推关系来完成。计数DP的典型特征是：状态转移方程中大量使用加法，最终答案往往是一个较大的整数，因此常需要取模运算（如对 10^9+7 取模）。计数DP是动态规划中非常重要的一类题型，核心在于「状态设计」和「转移累加」。]]></description><category></category></item><item><title><![CDATA[插头DP：从状态压缩到轮廓线转移的完整入门]]></title><link>https://blog.csdn.net/QY8765/article/details/164402599</link><guid>https://blog.csdn.net/QY8765/article/details/164402599</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:35:14 +0800</pubDate><description><![CDATA[插头DP是状态压缩DP中极具技巧性的分支，核心在于用轮廓线表达格子间的连通关系，并通过逐格转移维护状态。最小表示法通用性强，适合各类连通性问题；括号表示法在回路问题中更高效。掌握插头DP需要理解轮廓线的滚动过程、插头的配对关系以及转移时的分类讨论。建议读者从回路计数问题入手，逐步扩展到路径计数和连通块划分等更复杂的场景。]]></description><category></category></item><item><title><![CDATA[数位DP：从入门到实战的完整指南]]></title><link>https://blog.csdn.net/QY8765/article/details/164402652</link><guid>https://blog.csdn.net/QY8765/article/details/164402652</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:35:08 +0800</pubDate><description><![CDATA[数位DP（Digit DP）是一种用于解决「在某个数值区间内，统计满足特定条件的数字个数」问题的动态规划算法。它的核心思想是：把数字按位拆开，从最高位到最低位逐位进行状态转移，从而避免暴力枚举每一个数字。数位DP非常适合处理诸如「1到N之间有多少个数字不包含数字4」「某个区间内有多少个数字满足各位数字之和等于K」这类问题。这类问题如果直接暴力遍历，当N达到10的18次方甚至更大时，计算量会爆炸式增长，而数位DP可以在O(位数 × 状态数)的时间复杂度内高效求解。]]></description><category></category></item><item><title><![CDATA[状压DP：从状态压缩到动态规划的实战指南]]></title><link>https://blog.csdn.net/QY8765/article/details/164402585</link><guid>https://blog.csdn.net/QY8765/article/details/164402585</guid><author>QY8765</author><pubDate>Sat, 05 Sep 2026 18:26:57 +0800</pubDate><description><![CDATA[状压DP，全称是「状态压缩动态规划」，是一种利用二进制位来表示集合状态，从而把复杂的组合状态映射为整数，再配合动态规划进行求解的算法思想。它的核心思路是：当某个问题的状态可以用一个集合（例如哪些物品已选、哪些城市已访问）来描述时，用整数的二进制位来编码这个集合，每一位的 0 或 1 表示对应元素是否在集合中，从而把状态空间压缩成一个可枚举的整数范围。状压DP 特别适合解决「状态数量有限但组合爆炸」的问题，常见于旅行商问题（TSP）、棋盘覆盖、子集枚举、任务分配等场景。]]></description><category></category></item><item><title><![CDATA[树上DP：从入门到实战]]></title><link>https://blog.csdn.net/QY8765/article/details/164169082</link><guid>https://blog.csdn.net/QY8765/article/details/164169082</guid><author>QY8765</author><pubDate>Sat, 29 Aug 2026 13:53:13 +0800</pubDate><description><![CDATA[树上DP（动态规划）是一类在树形结构上进行的动态规划问题。它的核心思想是：把树看作由若干子树组成的结构，通过递归地求解子树的最优解，再合并得到整棵树的最优解。树上DP通常采用深度优先搜索（DFS）的方式，自底向上地计算每个节点的状态。与普通线性DP不同，树上DP的状态转移往往发生在父节点与子节点之间。常见的状态设计方式有两种：一种是以节点为状态，记录该节点子树内的最优值；另一种是结合背包思想，在树上做分组背包。]]></description><category></category></item><item><title><![CDATA[DAG上的DP：从拓扑排序到动态规划实战]]></title><link>https://blog.csdn.net/QY8765/article/details/164169069</link><guid>https://blog.csdn.net/QY8765/article/details/164169069</guid><author>QY8765</author><pubDate>Sat, 29 Aug 2026 13:52:01 +0800</pubDate><description><![CDATA[有向无环图是指由顶点和有向边组成的图，且图中不存在任何有向环。换句话说，从任意一个顶点出发，沿着有向边前进，都不可能回到该顶点本身。工程项目的任务依赖关系（AOE 网）编译器中指令的依赖分析数据流图中的计算顺序版本控制系统的提交历史DAG 上的动态规划是一类非常经典且实用的算法思想。其核心在于利用拓扑排序消除图中的依赖关系，将图上的递推转化为线性递推，从而高效地求解最长路径、路径计数、关键路径等问题。]]></description><category></category></item><item><title><![CDATA[方格 DP：从基础到进阶的完整指南]]></title><link>https://blog.csdn.net/QY8765/article/details/164169063</link><guid>https://blog.csdn.net/QY8765/article/details/164169063</guid><author>QY8765</author><pubDate>Sat, 29 Aug 2026 13:51:56 +0800</pubDate><description><![CDATA[方格 DP（Grid DP）是动态规划中一类非常经典的问题模型。它的核心场景是：在一个二维网格（方格）中，从起点出发，按照一定的移动规则（通常只能向右或向下）走到终点，求路径数量、最小代价、最大收益等问题。dp[i][j]表示从起点走到格子(i, j)时的某种最优值或方案数。由于移动方向受限（只能向右和向下），每个格子的状态只依赖于其上方和左方的格子，因此可以按行或按列顺序递推求解。方格 DP 是动态规划入门阶段必须掌握的核心模型。它的关键在于：明确状态含义、写出正确的转移方程、处理好边界条件。]]></description><category></category></item><item><title><![CDATA[区间及合并类动态规划详解]]></title><link>https://blog.csdn.net/QY8765/article/details/164169042</link><guid>https://blog.csdn.net/QY8765/article/details/164169042</guid><author>QY8765</author><pubDate>Sat, 29 Aug 2026 13:51:46 +0800</pubDate><description><![CDATA[以下通过两道典型例题进一步巩固区间 DP 的解题思路。例题一：戳气球。给定一组气球，每个气球上有数字，戳破一个气球可获得相邻三个气球数字的乘积作为分数，求最大得分。该题可反向思考：最后戳破的气球将区间分为左右两部分，状态dp[i][j]表示开区间(i, j)内气球全部戳破的最大得分，转移时枚举最后戳破的气球k。例题二：多边形剖分。给定凸多边形的顶点权值，求三角剖分的最小代价。状态dp[i][j]表示顶点i到j的子多边形剖分最小代价，转移时枚举顶点k作为剖分点，代价为三个顶点权值乘积之和。]]></description><category></category></item></channel></rss>