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); }
}