白駿1932号整数三角形(JAVA,DP)
1666 ワード
<解答方法>
三角形の形の配列に値を格納しないので、最初は少し苦労しました.
以下のように簡単に書くことができるが、それが分からないので、数を数えながらブレーキをかける方式で実現した.
次に、配列の最初のカラムをゼロにしてインデックスエラーを防止します.
arr[i][j] += Math.max(arr[i-1][j-1], arr[i-1][j]); 簡単な点火方式で解決しました.
すると、最後の列に最大値が累積され、その中で最大値を取って出力されます.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [][] arr = new int [n][n+1];
for(int i = 0 ; i < n ; i ++) {
int cnt = 0;
for(int j = 1 ; j < n+1 ; j++) {
arr[i][j] = sc.nextInt();
cnt++;
if(i+1 == cnt)
break;
}
}
//초기값 설정
arr[1][1] += arr[0][1];
arr[1][2] += arr[0][1];
for(int i = 2 ; i < n ; i ++) {
for(int j = 1; j < n+1; j++) {
//점화식 : 내 위에 2개중에 큰거를 선택해서 나한테 더해감
arr[i][j] += Math.max(arr[i-1][j-1], arr[i-1][j]);
}
}
int max = 0;
for(int i =0 ; i < n+1 ; i++) {
if(max < arr[n-1][i]) {
max = arr[n-1][i];
}
}
/*
for(int i = 0 ; i < n ; i++) {
System.out.println();
for(int j = 0 ; j < n+1;j++) {
System.out.printf("%d ", arr[i][j]);
}
}
*/
System.out.printf("%d", max);
}
}
Reference
この問題について(白駿1932号整数三角形(JAVA,DP)), 我々は、より多くの情報をここで見つけました https://velog.io/@alstjdwo1601/백준-1932번-정수-삼각형JAVADPテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol