下面是记忆化搜索的代码,直接用状态转移方程动态规划做也很快捷简单。
import java.io.PrintWriter;
import java.util.Scanner;
public class Main{
static Scanner input = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
static int n;
static int dp[][];
static int a[][];
static void initial(){
for(int i=0;i<n;i++){
for(int j=i;j>=0;j--){
a[i][j] = input.nextInt();
}
}
}
static boolean check(int x,int y){
if(x>=n||y>=n)return true;
return false;
}
static int dfs(int x,int y){//记忆化搜索,一个初始状态搜出局部最优再到全局最优
if(check(x,y))return 0;
if(dp[x][y]!=0)return dp[x][y];
dp[x][y] = Math.max(dfs(x+1,y),dfs(x+1,y+1))+a[x][y];
return dp[x][y];
}
public static void main(String[] args){
n = input.nextInt();
dp = new int[n][n];
a = new int[n][n];
initial();
out.println(dfs(0,0));
out.close();
}
}