考察的知识点:动态规划;
解答方法分析:
- 创建一个二维数组dp来保存中间结果,其中dp[i][j]表示从左上角到达位置(i, j)所经过路径上所有奶牛的体重积。
- 初始化第一行和第一列的值,分别为从左上角到每个位置的体重积。
- 使用双重循环计算其他位置的值,每次选择上方和左方路径中体重积较小的那个路径,再乘以当前位置的奶牛体重。
- 返回dp[m-1][n-1]
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cows int整型vector<vector<>> * @return long长整型 */ long long minPathProduct(vector<vector<int> >& cows) { int m = cows.size(); int n = cows[0].size(); vector<vector<long long>> dp(m, vector<long long>(n, 0)); dp[0][0] = cows[0][0]; for (int i = 1; i < m; i++) { dp[i][0] = dp[i - 1][0] * cows[i][0]; } for (int j = 1; j < n; j++) { dp[0][j] = dp[0][j - 1] * cows[0][j]; } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) * cows[i][j]; } } return dp[m - 1][n - 1]; } };