class Solution {
public:
int minPathSum(vector<vector<int> >& matrix) {
int m = matrix.size(), n = matrix[0].size();
auto& f = matrix[0];
for (int j = 1; j < n; j++) {
f[j] += f[j - 1];
}
for (int i = 1; i < m; i++) {
f[0] += matrix[i][0];
for (int j = 1; j < n; j++) {
f[j] = min(f[j], f[j - 1]) + matrix[i][j];
}
}
return f[n - 1];
// int m = matrix.size(), n = matrix[0].size();
// vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));
// dp[0][1] = 0;
// for (int i = 0; i < m; i++) {
// for (int j = 0; j < n; j++) {
// dp[i + 1][j + 1] = min(dp[i][j + 1], dp[i + 1][j]) + matrix[i][j];
// }
// }
// return dp[m][n];
}
};