数字三角形问题-dp
Posted nuist__NJUPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字三角形问题-dp相关的知识,希望对你有一定的参考价值。
思想:自底向上,dp[0][0]记录路径数字和的最大值。
方式1:键盘输入,控制台输出。
import java.util.Scanner;
public class NumberTriangle {
/**
* 自底向上的方式,使用triangle[0][0]存储最大路径值
* @param n 输入的数字三角形行数
* @param triangle 数字三角形
* @return
*/
public static int dp(int n, int [][] triangle){
for(int i=n-2; i>=0; i--){
for(int j=0; j<=i; j++){
if(triangle[i+1][j] >= triangle[i+1][j+1]){
triangle[i][j] += triangle[i+1][j] ;
}else{
triangle[i][j] += triangle[i+1][j+1] ;
}
}
}
return triangle[0][0] ;
}
public static void main(String[] args){
Scanner input = new Scanner(System.in) ;
int n = input.nextInt() ;
int [][] triangle = new int [n][n] ;
for(int i=0; i<n; i++){
for(int j=0; j<=i; j++){
triangle[i][j] = input.nextInt() ;
}
}
System.out.println(dp(n, triangle)) ;
}
}
方式2:文件流输入输出。
import java.io.*;
public class NumberTriangle1 {
public static String line ;
public static int i=0, j=0, n, temp;
static int [][] triangle = new int [1000][1000] ;
public static int dp(int n, int [][] triangle){
for(int i=n-2; i>=0; i--){
for(int j=0; j<=i; j++){
if(triangle[i+1][j] >= triangle[i+1][j+1]){
triangle[i][j] += triangle[i+1][j] ;
}else{
triangle[i][j] += triangle[i+1][j+1] ;
}
}
}
return triangle[0][0] ;
}
public static void main(String[] args) {
try(FileInputStream fileInputStream = new FileInputStream("D:\\\\study\\\\input.txt");
DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(fileInputStream))){
line = dataInputStream.readLine() ;
n = Integer.parseInt(line) ;
temp = n ;
while(n > 0){
line = dataInputStream.readLine() ;
String [] s = line.split("[ ]") ;
for(int k=0; k<s.length; k++) {
triangle[i][j] =Integer.parseInt(s[k]) ;
if(j<=i)
j ++ ;
}
i ++ ;
j = 0 ;
n -- ;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try(FileOutputStream fileOutputStream = new FileOutputStream("D:\\\\study\\\\output.txt");
DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(fileOutputStream))) {
dataOutputStream.writeBytes(String.valueOf(dp(temp, triangle)));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上是关于数字三角形问题-dp的主要内容,如果未能解决你的问题,请参考以下文章