728x90
300x250
dp[]에 인덱스 별 증가 부분 수열의 가장 큰 합을 넣어주고 max로 비교했다.
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int[] arr;
public static int[] dp;
public static int max = Integer.MIN_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
arr = new int[N];
dp = new int[N]; // 인덱스 별 증가 부분 수열의 가장 큰 합
String s = br.readLine();
StringTokenizer st = new StringTokenizer(s);
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
dp[0] = arr[0];
for (int i = 1; i < N; i++) {
dp[i] = arr[i];
for (int j = 0; j < i; j++) {
if(arr[j]<arr[i] && dp[i] < dp[j]+arr[i]) //현재 비교하는 수보다 기준이 되는 수가 더 큰지?
//비교하는 수의 최고 합 + 기준 되는 수가 현재 기준되는 수의 최고 합보다 더 커지는지?
dp[i]=dp[j]+arr[i];
}
}
for (int i = 0; i < N; i++) {
max = Math.max(max, dp[i]);
}
System.out.println(max);
}
}
728x90
'알고리즘 > DP' 카테고리의 다른 글
백준 11052번: 카드 구매하기 [DP][다이나믹 프로그래밍] -Java (0) | 2024.03.20 |
---|---|
백준 1463번: 1로 만들기 [DP][다이나믹 프로그래밍] - Java 코드 (0) | 2024.03.18 |
백준 11053번: 가장 긴 증가하는 부분 수열 [DP][LIS] - Java (0) | 2020.09.22 |
백준 2156번: 포도주 시식 [DP] - Java (0) | 2020.09.21 |
백준 9465번: 스티커 [DP] - Java (0) | 2020.09.21 |