emmmm,一开始以为最多应该是34,还问了考官半天,他让我再好好想想,考完发现左上的概念是什么。题目中给的案例应该斜着写就好了,总之很easy的动态规划,当前位置的总金币数等于 当前位置的金币数 + 左上或右上最多的总金币数

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main{
static ArrayList<integer> list = new ArrayList<integer>();</integer></integer>

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scanner = new Scanner(System.in);
    int N = scanner.nextInt();
    int[][] data = new int[N][N];

    for(int i = 0;i < N;i++) {
        for(int j = 0; j <= i;j++) {
            data[i][j] = scanner.nextInt();
        }


    }
    int[][] dp = new int[N][N+1];
    dp[0][0] = data[0][0];
    for(int i = 1; i <N;i++) {
        for(int j = 0; j <=i;j++) {
            if(j == 0)     dp[i][j] = dp[i-1][j]+ data[i][j] ;
            else 
            dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-1])+ data[i][j] ;
        }
    }

    int max = dp[N-1][0];
    for(int i = 0; i < N+1; i++) {
        if(dp[N-1][i] > max)
            max = dp[N-1][i];
    }

    System.out.print(max);


}

}