Java 题解 | #最小体重积#
最小体重积
https://www.nowcoder.com/practice/0980f806727e48f3b0253243416038c0
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cows int整型二维数组 * @return long长整型 */ public long minPathProduct (int[][] cows) { // write code here int m = cows.length; int n = cows[0].length; long[][] dp = new long[m + 1][n + 1]; for (int i = 0; i <= m; i++) { Arrays.fill(dp[i], Long.MAX_VALUE); } dp[0][1] = 1; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) * cows[i - 1][j - 1]; } } return dp[m][n]; } }
编程语言是Java。
该题考察的知识点:
- 动态规划:通过构建一个二维数组
dp
,使用动态规划的思想求解最小路径乘积问题。
代码的简短文字解释:
minPathProduct
函数接受一个二维整型数组cows
作为参数,表示农场中奶牛每个位置的产量。- 声明一个大小为
m+1
行、n+1
列的二维长整型数组dp
,并将其初始化为 Long 的最大值。 - 将
dp[0][1]
设为 1,作为起点。 - 使用两个嵌套循环遍历二维数组
cows
,从(1, 1)
开始计算每个位置(i, j)
对应的最小路径乘积。在每个位置,选择上方(i-1, j)
和左方(i, j-1)
中较小的路径乘积,再乘以当前位置的值cows[i-1][j-1]
,得到dp[i][j]
。 - 返回
dp[m][n]
作为结果。