AcWing 898. 数字三角形 java 从下到上求 和从上到下求
原题链接
简单
作者:
Acvv_scl
,
2021-03-14 20:53:06
,
所有人可见
,
阅读 309
1 从上往下求 ;常规思路
import java.util.*;
public class Main{
static int N=510;
static int [][]a=new int [N][N];
static int [][]f=new int [N][N];
static int INF=(int)1e9;
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
a[i][j]=sc.nextInt();
}
}
//初始化
for(int i=0;i<=n;i++){
for(int j=0;j<=n+1;j++){
f[i][j]=-INF;
}
}
f[1][1]=a[1][1];
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
f[i][j]=Math.max(f[i-1][j-1],f[i-1][j])+a[i][j];
}
}
int res=-INF;
for(int i=1;i<=n;i++)res=Math.max(res,f[n][i]);
System.out.println(res);
}
}
2 从下往上求
import java.util.*;
public class Main{
static int INF=1000000;
static int N=510;
static int [][]f=new int [N][N];
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)f[i][j]=-INF;
for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)f[i][j]=sc.nextInt();
for(int i=n-1;i>=1;i--)for(int j=i;j>=1;j--)f[i][j]+=Math.max(f[i+1][j],f[i+1][j+1]);
System.out.println(f[1][1]);
}
}