Base Case 与备忘录初始值的确定
本文通过一道经典 DP 题「下降路径最小和」讲解 base case、备忘录初始值和边界返回值的确定方法。
题目以 ACM 格式 给出:从标准输入读取数据,输出最小路径和。
题目描述
问题描述
给定一个 n × n 的方形整数矩阵,从第一行中的任意元素开始,每次可以移动到下一行的正下方、左下方或右下方(即 (row+1, col-1), (row+1, col), (row+1, col+1))。
求从第一行走到最后一行的最小路径和。
输入格式
- 第一行一个整数
n,表示矩阵的边长。 - 接下来
n行,每行n个整数,表示矩阵元素。
输出格式
一个整数,表示最小下降路径和。
输入样例 1
3
2 1 3
6 5 4
7 8 9
输出样例 1
13
输入样例 2
2
-19 57
-40 -5
输出样例 2
-59
数据范围
1 ≤ n ≤ 100-100 ≤ matrix[i][j] ≤ 100
解题思路(动态规划标准套路)
1. 定义 dp 函数
我们定义 dp(i, j) 表示:从第一行向下落,落到位置 matrix[i][j] 的最小路径和。
根据这个定义,最终答案就是最后一行的最小值:
answer = min(dp(n-1, 0), dp(n-1, 1), ..., dp(n-1, n-1))