解题思路
1 f[i][j]的意思是前i行和前j列的最小费用,其他的和摘花生那道题基本上是一样的。
2 为了让这个二维数组的边界可以取到最小值,我们应该将f数组的所有位置都赋值为
Integer.MAX_VALUE;.
相关代码
import java.util.Scanner;
public class Main {
static int a[][] = new int[110][110];
//f[i][j]的意思是前i行和前j列的最小费用。
static int f[][] = new int[110][110];
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j] = scan.nextInt();
}
}
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
f[i][j] = Integer.MAX_VALUE;
}
}
f[1][1] = a[1][1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==1&&j==1){
continue;
}
f[i][j] = Math.min(f[i-1][j],f[i][j-1])+a[i][j];
}
}
System.out.println(f[n][n]);
}
}