[백준, BOJ 11055] 가장 큰 증가 부분 수열 (java)
Problem Solving/BOJ

[백준, BOJ 11055] 가장 큰 증가 부분 수열 (java)

728x90

출처-https://www.acmicpc.net/problem/11055

 

11055번: 가장 큰 증가 부분 수열

수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수�

www.acmicpc.net


728x90

 

내가 푼 방식

: '11053'번과 동일한 방식으로 품.

  dp 배열에 순서를 저장해주지 않고 합을 저장해줌.

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int arr[]=new int[n+1];
		long dp[]=new long[n+1];
		
		for (int i=1;i<=n;i++)
			arr[i]=scan.nextInt();
		
		dp[1]=arr[1];
		for (int i=2;i<=n;i++) {
			for (int j=1;j<i;j++) {
				if (arr[i]>arr[j]) {
					if (dp[i]<=dp[j]+arr[i])
						dp[i]=dp[j]+arr[i];
				}
			}
			if (dp[i]==0)
				dp[i]=arr[i];
		}
		
		long max=0;
		for (int i=1;i<=n;i++) {
			if (max<=dp[i])
				max=dp[i];
		}
		
		System.out.println(max);
	}

}
728x90