AcWing 898. 数字三角形
原题链接
简单
作者:
模板菜鸡
,
2021-03-04 23:14:31
,
所有人可见
,
阅读 265
import java.util.Scanner;
public class T898 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[][] num=new int[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
num[i][j]=sc.nextInt();
}
}
/*确定状态
* 最后一步 到达底层有哪条路最大
* 子问题 该路径上一点的最大路径
*
上方 就是左下方到达 右上方到达
* 状态转移方程 f[i][j]=max(f[i-1][j],f[i-1][j-1])+num[i][j];
* 边界 第一列只能从上方走(左上方)
*/
//f[j]=max(f[i])
int[][] f=new int[n][n];
f[0][0]=num[0][0];
for(int i=1;i<n;i++){
for(int j=0;j<=i;j++){
if(j==0)
f[i][j]=f[i-1][j]+num[i][j];
else if(j==i)
f[i][j]=f[i-1][j-1]+num[i][j];
else
f[i][j]=Math.max(f[i-1][j-1], f[i-1][j])+num[i][j];
}
}
//求到达底层的最大路径
int res=-1;
for(int i=0;i<n;i++){
res=Math.max(f[n-1][i], res);
}
System.out.println(res);
}
}