描述
给定一个金币地图,地图上的数值代表金币的数量。
此时地图上方有一只贪吃蛇从任意一点进入,每经过一处就会吞噬此处的金币。最终从地图下方出去。
贪吃蛇每次只会向下走,且不能走直线,也就是说,如果它在吞噬了地图中第 a 行第 b 列的 金币后,下一次只能走向第 a + 1行的第 c列(c != b)
求:该贪吃蛇能吞噬的最大金币数是多少。
输入
一个 m x n 的地图 a
1 ≤ m, n≤ 3000
1 ≤a[i][j]≤ 100
输出
输出一个整数,表示该贪吃蛇能吞噬的最大金币数
求解>-<
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int row = sc.nextInt();
int col = sc.nextInt();
int[][] array = new int[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
array[i][j] = sc.nextInt();
}
}
//问题:求到第i行最大和
//f(i,j) = f(i-1,j!= j) + max(array[i][j])
int[][] dp = new int[row][col];
//初始化
for(int k = 0; k < col; k++){
dp[0][k] = array[0][k];
}
for(int i = 1; i < row; i++){
for(int j = 0; j < col; j++){
int k = 0;
if(k == j){
k++;
}
while(k < col && k != j){
int tmp = dp[i-1][k] + array[i][j];
if(dp[i][j] < tmp){
dp[i][j] = tmp;
}
k++;
}
if(k == j){
k++;
}
while(k < col){
int tmp = dp[i-1][k] + array[i][j];
if(dp[i][j] < tmp){
dp[i][j] = tmp;
}
k++;
}
}
}
int max = dp[row-1][0];
for(int i = 1; i < col; i++){
if(max < dp[row-1][i]){
max = dp[row-1][i];
}
}
System.out.println(max);
}
}
```
求解
你把oj网站发一下 那个题
我这有个贪吃蛇游戏,是否符合你的要求。