题目简介
一个矩阵花生,每个交错点都有花生,数量靠用户输入,从左上出发到右下,怎么样走踩到的花生最多
DP问题思考方式
状态表示 F [ i,j ]
含义:所有从(1,1) 走到(i,j)的路线的集合
属性:Max/Min/数量
状态计算
集合划分:
主要按照最后一种情况来划分,且保留最后一个
1.从上下来到终点
2.从左边往右走到终点
举个例子(状态表示)
f(2,3)需要注意在算法中行列的一种概念模型。
含义:如图表示所有2行3列的所有路线的最大值
举个例子(状态计算)
是从最后一步来划分
一种情况是从上下来到终点
另一种是从左边往右走到终点
f[i-1,j] + w[i,j] 红色箭头
f[i , j-1] + w[i , j] 绿色箭头
代码
package lanqiaobei.dp;
import java.util.Scanner;
public class peanut {
/*花生数*/
static int[][] w = new int[110][110];
static int[][] f = new int[110][110];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
while((count--)>0){
int row = sc.nextInt();
int column = sc.nextInt();
/*外部输入值*/
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= column; j++) {
w[i][j] = sc.nextInt();
}
}
/*计算最小*/
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= column; j++) {
f[i][j] = Math.max(f[i-1][j]+w[i][j],f[i][j-1]+w[i][j]);
}
}
System.out.println(f[row][column]);
}
}
}