数字三角形
package Chapter5;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
/**
*
* DP 数字三角形
* @author vccyb
*
*/
public class P898 {
static final int N = 510;
static int[][] arr = new int[N][N];
static int[][] f = new int[N][N];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); //三角形的行数
for(int i=1;i<=n;i++){
String[] line = br.readLine().split(" ");
for(int j=1;j<=i;j++){
arr[i][j] = Integer.parseInt(line[j-1]);
}
}
//
// for(int i=1;i<=n;i++){
// for(int j=1;j<=i;j++){
// System.out.print(arr[i][j]+" ");
// }
// System.out.println();
// }
// dp解决问题
for(int[] k: f){
Arrays.fill(k, Integer.MIN_VALUE/2);
}
//很关键的初始化
f[1][1] = arr[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]+arr[i][j], f[i-1][j]+arr[i][j]);
}
}
int res = Integer.MIN_VALUE;
for(int i=1;i<=n;i++){
res = Math.max(res, f[n][i]);
}
System.out.println(res);
}
}
最长子序列
最长公共子序列
求最大值的时候可以重复