import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[][] a = new int[n + 1][m + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = in.nextInt();
}
}
int[][] dp = new int[n + 1][m + 1];
// 第一行、第一列只能够从前一列、前一行到达
for (int i = 1; i <= n; i++)dp[i][1] = dp[i - 1][1] + a[i][1];
for (int i = 1; i <= m; i++)dp[1][i] = dp[1][i - 1] + a[1][i];
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= m; j++) {
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
}
}
System.out.println(dp[n][m]);
}
}
二维dp

京公网安备 11010502036488号