动态规划新手必刷:洛谷精选30道DP题解与实战技巧

1. 动态规划入门:从“怕”到“爱”的思维转变

很多编程新手一听到“动态规划”这四个字,心里就开始打鼓,觉得这玩意儿高深莫测,是算法竞赛里的大魔王。我刚开始学的时候也一样,看到状态转移方程就头疼,感觉像是在解天书。但后来刷了上百道题,尤其是把洛谷上那些经典的入门题啃下来之后,我才发现,动态规划其实是一套非常优美、有章可循的解题思想。它不是什么魔法,更像是一个经验丰富的“老管家”,帮你把复杂问题拆解、记录、再组合,最终高效地找到答案。

简单来说,动态规划的核心思想就是“记住过去,服务未来”。我们遇到一个大问题,直接求解可能很困难,但如果我们发现这个大问题可以由一系列更小的、结构相似的子问题组合而成,并且这些子问题的解可以被存储和复用,那么动态规划就派上用场了。这就像你要计算从1加到100,聪明的办法不是真的去加99次,而是发现(1+100)、(2+99)…这些配对的和都是101,一共有50对,所以结果是5050。动态规划就是帮你找到这种“配对”或者更通用的“子问题结构”的思维工具。

对于零基础的朋友,我强烈建议从洛谷这个平台开始。它的题目梯度设置得很友好,社区活跃,题解丰富。更重要的是,洛谷的很多动态规划题目都源于经典的模型,比如背包问题、最长公共子序列等,你吃透一道,往往就能解决一类。我当年就是靠着刷洛谷的精选DP题,才真正建立了信心,从“看见DP就想跳”变成了“看见问题先想想能不能DP”。接下来,我会结合我踩过的坑和总结的技巧,带你一起攻克洛谷上30道最适合新手的DP题,让你也能感受到那种“灵光一现”后顺利AC的快乐。

2. 动态规划核心心法:状态与转移

想要玩转动态规划,你必须掌握两个最核心的概念:状态定义状态转移方程。这就像是武侠小说里的内功心法,招式可以千变万化,但心法根基必须扎实。

2.1 如何定义“状态”

状态,说白了就是描述当前问题局面的一组参数。定义状态是整个DP过程最关键的一步,定义得好,问题迎刃而解;定义得不好,就会陷入死胡同。我总结了一个“三步提问法”来帮助确定状态:

  1. 问题在变化,是什么在变? 找到那些随着决策进行而不断变化的量。比如在经典的“爬楼梯”问题里,你所在楼梯的“阶数”就是那个核心的变化量。
  2. 这些变化量,如何量化表示? 把找到的变化量用变量表示出来,这通常就直接构成了我们的状态数组维度。比如,用 dp[i] 表示到达第 i 级台阶的方法数。
  3. 这个表示能否唯一确定一个子问题? 确保你定义的状态包含了做出下一步决策所需的全部信息。比如在“背包问题”中,只记录当前考虑到的物品编号 i 是不够的,因为背包的剩余容量 j 也直接影响后续选择,所以状态必须是二维的 dp[i][j]

拿洛谷的 P1439 【模板】最长公共子序列 来说,题目给了两个序列。最直接的想法就是模仿最长公共子序列(LCS)的经典定义:设 dp[i][j] 表示序列A的前 i 个字符和序列B的前 j 个字符能构成的最长公共子序列长度。这个定义清晰且唯一地刻画了“我们已经处理了A的前i部分和B的前j部分”这个子问题。新手常犯的错误是试图把“当前找到的公共子序列具体是什么”也塞进状态里,这会让状态变得极其复杂。DP的状态应该只记录“最优解的值”,而不是“解本身”。

2.2 构建“状态转移方程”

状态定义好了,接下来就是思考状态之间如何“流动”和“更新”,这就是状态转移方程。它描述了如何通过已知的、更小的子问题的解(通常是我们已经计算并存储在 dp 数组里的值),来推导出当前问题的解。

构建方程,我习惯用“最后一步”分析法。假设我们已经得到了当前状态 dp[i][j] 的最优解,那么得到这个解的最后一步操作可能是什么? 然后我们枚举这最后一步的所有可能性,从这些可能性对应的前驱状态中,选出最优的那个,加上最后一步的代价或收益,就得到了当前状态的值。

P1140 相似基因 为例,我们定义了 dp[i][j] 为A序列前 i 个字符和B序列前 j 个字符的最大相似值。现在考虑得到 dp[i][j] 的最后一步匹配:

  • 可能性1:A的第 i 个字符和B的第 j 个字符直接匹配。那么相似值就是 dp[i-1][j-1] 加上这两个字符的匹配得分。
  • 可能性2:A的第 i 个字符和B中的一个“空位”(-)匹配。这相当于B序列在 j 位置插入一个空位来对应A的 i,那么相似值就是 dp[i-1][j] 加上A[i]与空位的匹配得分。
  • 可能性3:B的第 j 个字符和A中的一个“空位”匹配。同理,相似值是 dp[i][j-1] 加上B[j]与空位的匹配得分。

dp[i][j] 应该取这三种可能性中的最大值。于是,转移方程就出来了:dp[i][j] = max(dp[i-1][j-1] + score[A[i]][B[j]], dp[i-1][j] + score[A[i]][-], dp[i][j-1] + score[-][B[j]])。你看,通过分析“最后一步”,方程就自然浮现了。刚开始你可能需要多在纸上画一画,但熟练之后,这个过程会越来越快。

3. 经典模型实战:背包问题全家桶

背包问题是动态规划里最经典、也最实用的模型之一,可以说是新手必须攻克的第一个堡垒。它的变体非常多,但核心思想都是:有一个容量有限的背包,和一堆有重量和价值的东西(物品),如何选择物品装入背包,使得总价值最大。

3.1 0/1背包:拿或不拿的抉择

0/1背包是最基础的模型,每个物品只有一件,要么拿(1),要么不拿(0)。洛谷的 P1048 采药 就是一道标准的0/1背包题。时间是背包容量,草药是物品,采药时间是其重量,草药价值是其价值。

我们定义状态 dp[j] 表示在总时间(容量)为 j 的情况下,能获得的最大价值。注意这里优化成了一维数组,这是0/1背包的一个经典空间优化技巧。为什么可以优化?因为每个物品只能使用一次,我们在更新 dp[j] 时,需要的是上一轮(考虑前i-1个物品时)容量为 j-w[i] 的状态。为了保证这个状态没有被当前物品污染,我们需要逆序枚举容量 j

// 假设 time[i] 为采药时间, value[i] 为草药价值, T 为总时间
vector<int> dp(T + 1, 0);
for (int i = 0; i < n; ++i) { // 遍历每个物品
    for (int j = T; j >= time[i]; --j) { // 逆序枚举容量!
        dp[j] = max(dp[j], dp[j - time[i]] + value[i]);
    }
}
cout << dp[T] << endl;

这个逆序循环是新手最容易出错的地方。你可以这样理解:正序循环时,dp[j - time[i]] 可能在当前物品 i 的循环中已经被更新过了(即可能已经装入了物品 i),这就相当于物品被重复使用了,变成了“完全背包”的逻辑。而逆序保证了我们在计算 dp[j] 时,dp[j - time[i]] 对应的还是“没考虑过物品 i”的状态。

3.2 完全背包与多重背包:数量的游戏

完全背包允许多次选取同一物品。洛谷 P1616 疯狂的采药 就是完全背包。它的状态定义和0/1背包一样,但转移时,因为物品无限,所以我们可以从“已经拿过当前物品”的状态转移过来。实现上,只需把容量的循环从逆序改为正序即可。

for (int i = 0; i < n; ++i) {
    for (int j = time[i]; j <= T; ++j) { // 正序枚举容量!
        dp[j] = max(dp[j], dp[j - time[i]] + value[i]);
    }
}

正序循环意味着,在考虑容量 j 时,dp[j - time[i]] 可能已经包含了当前物品 i,这样就实现了物品的无限次使用。

多重背包则更复杂一些,每个物品有固定的数量上限 s[i]。最朴素的解法是把多重背包拆成多个0/1背包(即把 s[i] 个相同物品看成 s[i] 个不同物品),但这样效率低。更高效的方法是二进制拆分。比如一个物品有13个,我们不拆成13份,而是拆成1、2、4、6(13-1-2-4)这四份。这四份通过组合,可以表示出0到13之间的任何数量,同时物品项数从13降到了4,再对这四份做0/1背包,效率大大提升。洛谷 P1776 宝物筛选 就是一道很好的多重背包练习题,可以用二进制拆分来优化。

3.3 背包变体与应用

背包模型远不止于求最大价值。P2725 [USACO3.1]邮票 Stamps 就是一个精彩的变体。题目问给定面额的邮票,最多能用 K 张凑出从1开始的连续最大面值是多少。这看起来不像背包,但我们可以转化:把“面值”看成背包容量,dp[j] 表示凑出面值 j 所需的最少邮票张数。初始化 dp[0]=0,其他为无穷大。然后遍历每种面额的邮票(物品),进行完全背包式的更新(因为每种邮票无限张)。最后从1开始检查 dp[j] 是否小于等于 K,找到第一个不满足的 j,答案就是 j-1。这道题巧妙地将“可行性问题”转化为了背包问题。

4. 线性与序列上的DP:最长XX子序列

另一大类经典DP问题发生在序列上,比如求最长上升子序列(LIS)、最长公共子序列(LCS)等。这类问题通常状态定义直观,但优化技巧值得深究。

4.1 最长上升子序列(LIS)的两种境界

最朴素的LIS解法是 O(n^2) 的。定义 dp[i] 为以第 i 个元素结尾的最长上升子序列长度。转移方程是 dp[i] = max(dp[j]) + 1,其中 j < iarr[j] < arr[i]。这需要两层循环。洛谷 P1020 导弹拦截 的第一问,求最长不上升子序列长度,就可以用类似思路解决,只是条件变为 arr[j] >= arr[i]

O(n^2)n 较大时会超时。这时就需要 O(n log n) 的贪心+二分优化算法。我们维护一个数组 d[]d[len] 表示长度为 len 的上升子序列的末尾元素的最小值。这个数组是单调递增的。遍历原序列每个数 arr[i]

  • 如果 arr[i] > d[len],直接加到末尾,len++
  • 否则,在 d[1...len] 中二分查找第一个大于等于 arr[i] 的位置 pos,并用 arr[i] 更新 d[pos]

最终 len 就是LIS长度。这个算法的核心思想是:对于相同长度的子序列,我们只关心那个末尾元素最小的,因为它“潜力”更大,更有可能接上后面的元素。P2782 友好城市 就是LIS的变形应用题。我们将南岸城市排序后,北岸对应城市的编号序列,其最长上升子序列就是答案,因为这样才能保证航道不交叉。

4.2 最长公共子序列(LCS)与问题转化

经典的LCS定义 dp[i][j] 为A串前i位和B串前j位的LCS长度。转移方程是:

  • A[i] == B[j]dp[i][j] = dp[i-1][j-1] + 1
  • 否则,dp[i][j] = max(dp[i-1][j], dp[i][j-1])

但当序列元素都是整数且范围不大时,如 P1439 【模板】最长公共子序列n 可达 10^5O(n^2) 的DP肯定不行。这里就需要巧妙的问题转化。题目保证两个序列都是 1n 的全排列。我们可以将第一个序列 a 的值映射为其下标(离散化),得到一个“位置映射”。然后按照这个映射,将第二个序列 b 转换成一个新的序列 c,其中 c[i] = pos[b[i]](即 b[i]a 中的位置)。

这时,神奇的事情发生了:求 ab 的LCS,等价于求序列 c最长上升子序列(LIS)!因为 a 是严格递增的 1,2,3...nb 中和 a 公共的部分,在 c 中对应的位置也必须保持递增顺序。于是,一个 O(n^2) 的问题,通过转化,变成了一个可以用 O(n log n) 解决的LIS问题。这种“转化问题”的思想在DP中至关重要,当你觉得直接DP复杂度太高时,不妨想想题目是否有特殊性质,能否转化为已知的、更高效的模型。

5. 区间、坐标与路径DP

当问题涉及到区间、二维坐标或者路径规划时,DP的状态定义往往需要更高的维度。

5.1 区间DP:从小段合并到大段

区间DP通常用来解决合并类问题,比如石子合并、括号匹配等。它的状态一般定义为 dp[i][j],表示处理区间 [i, j] 所能得到的最优解。转移时,我们通常枚举一个分割点 k (i <= k < j),将大区间 [i, j] 拆分成两个子区间 [i, k][k+1, j],然后合并这两个子区间的解。关键点在于,我们需要先计算出所有更小区间的解,才能计算大区间,所以遍历顺序通常是按区间长度从小到大。

例如,最简单的石子合并问题(求最小合并代价),转移方程是:dp[i][j] = min(dp[i][k] + dp[k+1][j] + sum[i][j]),其中 sum[i][j] 是区间 [i, j] 的石子总重量,k 是分割点。我们需要先循环区间长度 len,再循环起点 i,算出终点 j = i + len - 1,最后在内层循环分割点 k

5.2 坐标DP与路径规划

这类问题状态通常直接与坐标 (i, j) 相关。比如 P1004 方格取数,两个人从左上角走到右下角,取走路径上的数,求最大总和。一个最直接的状态定义是四维:dp[x1][y1][x2][y2] 表示第一个人走到 (x1, y1),第二个人走到 (x2, y2) 时取到的最大和。但这样复杂度是 O(n^4)

我们可以优化状态,利用“两人步数相同”的性质。设步数为 s,那么 x1 + y1 = x2 + y2 = s。所以我们可以用三维状态 dp[s][x1][x2] 来表示,其中 s 是步数,x1, x2 分别是两人的横坐标,两人的纵坐标可以通过 y1 = s - x1, y2 = s - x2 算出。这样状态数从 n^4 降到了约 2n * n^2 = O(n^3),是一个很大的优化。转移时,考虑两人上一步从哪里来(上或左),共有2*2=4种组合。

P6208 [USACO06OCT]Cow Pie Treasures G 也是一道有趣的坐标DP。定义 dp[i][j] 为走到 (i, j) 能获得的最大值。但由于只能向右、右上、右下走,且必须从第一列开始,所以更新顺序很重要。我们需要按列 j 从左到右遍历,对于每一列,再从上到下(或从下到上)更新每个行 idp 值,确保在更新 (i, j) 时,(i-1, j-1)(i, j-1)(i+1, j-1) 这些“上一步”的位置已经被计算过了。这种对遍历顺序的考量,在坐标DP中很常见。

6. 状态压缩与树形DP初探

当问题规模不大,但状态本身比较复杂(比如一个集合)时,我们可以用状态压缩DP。当问题的结构是一棵树时,树形DP就派上用场了。

6.1 状态压缩DP:用二进制表示集合

状态压缩DP通常用于解决“旅行商问题(TSP)”或者棋盘摆放这类问题,其中状态包含了一个集合信息(比如哪些城市已经访问过,哪些格子被占用)。由于集合可以用二进制位来表示(1表示包含,0表示不包含),一个整数就能代表一个集合,从而可以用作DP状态的一个维度。

例如,一个经典的模型是:有 n 个城市,从城市0出发,要访问所有城市恰好一次后回到起点,求最短路径。我们可以定义 dp[S][i] 表示已经访问过的城市集合为 S(二进制掩码),当前位于城市 i 时的最短路径长度。转移时,枚举下一个还没访问的城市 j,更新 dp[S | (1<<j)][j] = min(dp[S | (1<<j)][j], dp[S][i] + dist[i][j])。这里 S | (1<<j) 表示将城市 j 加入集合 S。最终答案是 dp[(1<<n)-1][i] + dist[i][0] 的最小值,即访问完所有城市并回到0。

洛谷上很多状压DP的入门题,比如 P1896 [SCOI2005]互不侵犯,在 N x N 的棋盘上放 K 个国王,他们不能互相攻击。我们可以用 dp[i][j][S] 表示前 i 行,已经放了 j 个国王,且第 i 行的摆放状态为 S(一个二进制数,1表示放国王)的方案数。转移时,检查第 i 行的状态 S 自身是否合法(相邻不能放),以及 S 和上一行的状态 T 是否冲突(上下、对角不能同时放)。

6.2 树形DP:递归与回溯

树形DP通常以递归(DFS)的形式实现,因为树的结构天然适合递归遍历。状态设计往往和树的节点相关。一个典型的例子是“没有上司的舞会”(洛谷 P1352),每个员工有一个快乐值,但不能和直接上司同时参加。我们定义 dp[u][0] 表示以 u 为根的子树,u 不参加时的最大快乐值;dp[u][1] 表示 u 参加时的最大快乐值。

那么,转移方程在DFS回溯时进行:

  • u 不参加:那么它的每个子节点 v 可以参加也可以不参加,所以 dp[u][0] += max(dp[v][0], dp[v][1])
  • u 参加:那么它的所有子节点都不能参加,所以 dp[u][1] += dp[v][0]

最后,根节点的答案就是 max(dp[root][0], dp[root][1])。树形DP的关键在于,通过后序遍历(先处理所有子树),保证在计算父节点状态时,所有子节点的状态已经计算完毕。P2015 二叉苹果树 也是一个很好的练习,它本质上是一个树上的背包问题:保留 Q 条树枝,使得留下的苹果最多。定义 dp[u][j] 为以 u 为根的子树,保留 j 条树枝(边)能获得的最大苹果数,然后在合并各个子树时,做一个分组背包的转移即可。

7. 刷题路线与避坑指南

纸上得来终觉浅,绝知此事要躬行。看了这么多理论和例题,最重要的还是动手去刷。这里我结合自己的经验,给你规划一条洛谷DP的刷题路线,并分享几个我踩过的“大坑”。

7.1 新手30题精选路线

我建议按照从易到难、从模型到综合的顺序来刷,这样能循序渐进地建立信心和能力。下面这个路线图你可以参考:

阶段核心目标推荐题目(洛谷题号)关键技巧
第一阶段:建立直觉理解状态与转移的基本概念,熟悉一维DP。P1216 数字三角形、P1255 数楼梯、P1048 采药(0/1背包)定义状态 dp[i]dp[i][j],找出递推关系。数字三角形注意从下往上推更简单。
第二阶段:掌握经典模型攻克背包、LIS、LCS三大核心模型。P1616 疯狂的采药(完全背包)、P1776 宝物筛选(多重背包)、P1020 导弹拦截(LIS)、P1439 LCS(转化LIS)背包问题掌握逆序(0/1)和正序(完全)循环的区别。LIS掌握 O(n log n) 解法。
第三阶段:理解多维与转化学习二维坐标DP和问题转化的艺术。P1004 方格取数(双路径)、P1103 书本整理(二维状态设计)、P1435 回文字串(转化为LCS)学会用步数等参数优化状态维度。多思考“这个问题是不是我见过的某个问题的变种?”。
第四阶段:接触高级主题初步了解区间、状压、树形DP的思想。P1880 石子合并(区间DP)、P1896 互不侵犯(状压DP)、P1352 没有上司的舞会(树形DP)区间DP注意遍历顺序。状压DP理解二进制表示集合。树形DP掌握DFS回溯更新。

你可以根据自己的进度调整,每个阶段确保把核心题目吃透,理解为什么这么定义状态,转移方程怎么来的,而不是仅仅背下代码。遇到难题时,一定要先自己思考至少20分钟,画图、列状态,实在想不出再看题解,并对比自己的思路卡在了哪里。

7.2 常见“坑点”与调试心得

  1. 数组越界与初始化:这是最常见的错误。DP数组的大小一定要开够,通常要比理论最大值多开一点(比如+5或+10)。初始化至关重要,dp[0] 或者 dp[0][0] 这种“起点”状态的值通常不是0就是1,要根据题意设定。其他状态一般初始化为一个不可能的值(比如求最大值时初始化为负无穷,求最小值时初始化为正无穷),以确保它们能被正确更新。
  2. 遍历顺序:这是DP的灵魂,顺序错了全盘皆输。对于背包问题,牢记“0/1背包逆序,完全背包正序”。对于区间DP,要先枚举区间长度。对于坐标DP,要保证在计算 dp[i][j] 时,它所依赖的前驱状态都已经计算过了。多花时间在纸上模拟一下循环过程,能帮你理清顺序。
  3. 状态定义模糊:这是导致思路混乱的根源。一定要用一句清晰的话描述出 dp[i][j] 的确切含义。比如在 P1103 书本整理 中,dp[i][j] 不能模糊地定义为“前i本书选j本”,而必须明确是“从前i本书中选出j本书,并且第i本书是这j本书中的最后一本”时的最小不整齐度。这个“最后一本”的限定,是连接状态转移的桥梁,没有它,你就不知道新加入的书应该和哪本书计算高度差。
  4. 整数溢出:DP的中间结果或最终答案可能非常大,远超 int 范围。在像C++这样的语言中,要时刻警惕,该用 long long 的时候不要吝啬。特别是在计数类DP(比如求方案数)或价值累加很大的题目中。
  5. 被“标签”迷惑:洛谷的题目标签是用户添加的,有时不一定准确。有些题打了DP的标签,但可能用贪心、搜索甚至数学方法更简单。比如 P1649 [USACO07OCT]Obstacle Course S,虽然标签有DP,但用BFS求最少转弯次数更直观。P2782 友好城市,核心是排序后求LIS,DP只是实现LIS的手段。所以,不要被标签限制思路,最重要的是分析题目本身的结构。

最后,分享一个我的调试习惯:在写出转移方程后,不要急着敲完整代码,先用手算或者写个小程序模拟一个最简单的例子(比如 n=3n=4),把整个 dp 表打印出来,看看每个格子的值是不是按你预期的方式填写的。这个过程能帮你发现90%以上的逻辑错误。动态规划的学习是一个螺旋上升的过程,初期会觉得很难,但当你刷够一定量的题目,建立起“模型识别”和“状态设计”的肌肉记忆后,你会发现很多新题不过是旧瓶装新酒,那种解题的成就感是无与伦比的。就从今天开始,挑一道最简单的题,动手写起来吧。

内容概要:本文研究了基于变分模态分解(VMD)、卷积神经网络(CNN)和双向长短期记忆网络(BiLSTM)相结合的负荷预测模型,旨在提升电力系统中负荷预测的精度稳定性。通过VMD将原始负荷数据自适应分解为多个本征模态函数(IMF),有效降低序列的非平稳性噪声干扰;利用CNN逐层提取各模态分量的局部时序特征空间结构信息;再通过BiLSTM充分捕捉时间序列的长期依赖关系前后向动态特征,实现对各分量的高精度预测;最终通过重构获得整体负荷预测结果。该混合模型充分发挥了信号分解技术深度学习网络的优势,显著提升了在复杂非线性、多波动场景下的预测性能。文中提供了完整的Python代码实现,便于读者复现应用。; 适合人群:具备一定Python编程基础和机器学习知识,从事电力系统、能源管理、智能电网或时序数据分析等相关领域的研究人员、工程技术人员及研究生。; 使用场景及目标:①应用于电力系统短期中期负荷预测,提升电网调度、能源规划需求响应的决策效率;②为研究者提供一种融合信号预处理深度学习的复合预测框架设计思路,用于处理高噪声、非平稳的复杂时序数据;③通过代码实践深入掌握VMD参数优化、CNN特征提取层设计、BiLSTM网络结构搭建及其协同工作机制,推动模型迁移二次开发。; 阅读建议:建议读者结合提供的代码逐步实现模型,重点关注VMD的分解层数(K值)惩罚因子(α)的选择、CNN卷积核大小池化策略的设计,以及BiLSTM的隐藏单元数dropout参数的调优,并通过真实负荷数据进行训练、验证性能对比分析,以深入理解模型各组件的作用整体优化路径。
内容概要:本文提出了一种基于多目标粒子群算法(MOPSO)的配电网储能系统选址定容优化方法,旨在解决高比例分布式电源接入背景下储能装置在配电网中的最优空间布局容量配置问题。研究构建了涵盖经济性、电压稳定性、网络损耗等多重目标的优化模型,并通过Matlab编程实现MOPSO算法求解,获得Pareto最优解集,为决策者提供多样化的折衷方案。文中详细阐述了算法设计原理、数学建模过程、系统约束条件设定及仿真验证流程,充分体现了该方法在提升配电网运行效率、改善电压质量、降低网损以及促进可再生能源消纳方面的综合优势。; 适合人群:具备电力系统分析、智能优化算法理论基础,从事新能源并网、微电网规划、储能系统配置等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于含高渗透率分布式光伏或风电的配电网规划升级改造;②指导实际工程中储能系统的科学选点合理定容,实现电网运行的降本增效可靠性提升;③作为多目标智能优化算法在电力系统规划领域应用的教学案例研究基础。; 阅读建议:建议结合提供的Matlab代码进行仿真实践,深入理解算法实现细节关键参数(如种群规模、学习因子、惯性权重)对收敛性解集分布的影响,同时可尝试引入NSGA-II等其他先进多目标算法进行对比分析,以深化对不同优化策略性能差异的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值