问题描述:
输入输出格式:
样例输入:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 4
代码思路:
起初做这道题的时候,将题理解为在任何状态下向左走的次数与向右走的次数相差小于1,后面才知道,是最终状态时向左走的次数与向右走的次数相差小于1,则可以定义一个二维数组,行和列都是n+1,从1开始进行赋值,令nums[i][j] += Math.max(nums[i-1][j-1], nums[i-1][j]),最后对n进行判断(因为题目中说明向左和向右的次数相差小于1),如果n为奇数,则输出中间的那个数即nums[n][n/2],如果n为偶数,则输出中间哪两个较大的数即Math.max(nums[n][n/2] , nums[n][n/2+1])。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] nums = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
nums[i][j] = sc.nextInt();
nums[i][j] += Math.max(nums[i - 1][j - 1], nums[i - 1][j]);
}
}
if (n % 2 == 1) {
System.out.println(nums[n][(n + 1) / 2]);
} else {
System.out.println(Math.max(nums[n][n / 2], nums[n][n / 2 + 1]));
}
}
}