已知网格上每个网格点有一个数字,a[i][j] 表示第 $i$ 行第 $j$ 列处网格点上的数字。若 dp[i][j] 表示从网格左上角(第 $0$ 行第 $0$ 列)走到第 $i$ 行第 $j$ 列时能取得的最大数字和,且每次只能向右或向下移动。对于 $i>0$ 且 $j>0$ 的位置,正确的状态转移代码为( )。
仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】动态规划|状态转移|路径优化
🎯 考纲定位 本题考查 GESP 七级大纲"动态规划"模块核心能力——最优子结构建模。命题人卡住的是大量考生混淆"最大值"与"最小值"、"正着推"与"倒着推"的基本方向感,这是七级 DP 最易失分的硬伤。
🧠 解题思维 看到"每次只能向右或向下"要立刻锁定:当前点的前驱只有两个——上方 (i-1,j) 和左方 (i,j-1)。求最大和自然取 max,求最小和才取 min,这是方向感。状态方程结构:当前值 + 前驱最优值。边界要单独处理(第一行只能从左来,第一列只能从上来),但题目明确限定 i>0 且 j>0,所以直接用通用式即可。
🪤 陷阱拆解
最阴险的是 B 和 D 看似"简洁",但命题人利用的是"只写一个前驱"的偷懒思维——DP 的本质是枚举所有合法前驱取最优。
🔄 反命题思维 若把"最大和"改成"最小和",答案立刻变 C 中的 min 版本;若允许斜向移动,前驱要加 dp[i-1][j-1] 并取 max;若要求"从左上到右下"而非任意点,最后答案固定为 dp[n-1][m-1]。刷到这类题先问:可移动方向、目标值(最大/最小)、状态定义范围——三个要素定生死。