贪吃蛇拾金币(c语言 c++)

描述

给定一个金币地图,地图上的数值代表金币的数量。

此时地图上方有一只贪吃蛇从任意一点进入,每经过一处就会吞噬此处的金币。最终从地图下方出去。

贪吃蛇每次只会向下走,且不能走直线,也就是说,如果它在吞噬了地图中第 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网站发一下 那个题

我这有个贪吃蛇游戏,是否符合你的要求。