https://www.acmicpc.net/problem/11055
11055번: 가장 큰 증가 부분 수열
수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수
www.acmicpc.net
해석 및 팁
이 문제는 백준 11053 가장 긴 증가하는 부분 수열 문제와 상당히 유사한 문제입니다. dp[] 배열에 증가 부분의 합을 넣은 뒤 가장 큰 값을 출력하면 됩니다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int max = -1;
int n = sc.nextInt();
int[] arr = new int[n];
int[] dp = new int[n];
for(int i = 0; i < n; i++) arr[i] = sc.nextInt();
for(int i = 0; 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);
}
}
'백준' 카테고리의 다른 글
백준 2644 촌수계산(Java) (0) | 2023.02.09 |
---|---|
백준 1699 제곱수의 합(Java) (0) | 2023.02.08 |
백준 11051 이항 계수 2(Java) (0) | 2023.02.08 |
백준 1780 종이의 개수(Java) (0) | 2023.02.08 |
백준 1406 에디터(Java) (0) | 2023.02.08 |