티스토리 뷰

https://www.acmicpc.net/problem/1912 

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

이번 문제도 앞선 LIS유형의 문제들과 다를 바가 없다. 이번 문제에서는 dp배열에는 numbers[i]로 끝나는 최대 연속합으로 지정한다. dp[i-1]+numbers[i]>numbers[i[? dp[i]=dp[i-1]+numbers[i] : dp[i]=numbers[i] 를 하면 된다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
                
        long[] numbers = new long[num];
        for(int i=0;i<num;i++) {
            numbers[i]=sc.nextInt();
        }
        
        long[] dp = new long[num];
        dp[0]=numbers[0];
        
        
        
        for(int i=1;i<num;i++) {
            if(dp[i-1]+numbers[i]>numbers[i]) {
                dp[i]=dp[i-1]+numbers[i];
            }else {
                dp[i]=numbers[i];
            }
        }
        
        Arrays.sort(dp);
        System.out.println(dp[dp.length-1]);
        
 
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter

 

댓글