728x90
https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
< 풀이 방법 >
▶ 길이가 n인 수열 A가 주어짐
▶ 연속합을 구하는 작은 단위의 식 (누적) ☞ A(i) = A(i-1) + A(i) ( 0 < i < n )
이전 합 현재 항
▶ 이전 합( A(i-1) )이 음수이고, 이전 합과 현재 항을 더한 값( A(i-1) + A(i) )이 음수면,
연속합을 구했을 때 수열의 현재 항( A(i) )보다 값이 작아지므로 이전 합을 더하지 않음
▶ 1번째 항부터 n-1번째 항까지 반복하고 난 후, 수열 A에서의 최댓값이 연속합들의 가장 큰 합이 됨
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(System.out) );
int n = Integer.parseInt( br.readLine() ), i, max;
int dp[] = new int[n];
StringTokenizer st = new StringTokenizer( br.readLine() );
for( i = 0; i < n; i++ )
dp[i] = Integer.parseInt( st.nextToken() );
max = dp[0];
for( i = 1; i < n; i++ ) {
if( dp[i-1] > 0 && dp[i-1] + dp[i] > 0 )
dp[i] += dp[i-1];
if( max < dp[i] )
max = dp[i];
}
bw.write( max + "\n" );
bw.flush();
bw.close();
}
}
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 백준 온라인 저지 ( BOJ )' 카테고리의 다른 글
[백준(Baekjoon)][자바(java)] 2630 : 색종이 만들기 / 분할 정복 (0) | 2020.08.26 |
---|---|
[백준(Baekjoon)][자바(java)] 12865 : 평범한 배낭 / 동적 계획법 1 (0) | 2020.06.20 |
[백준(Baekjoon)][자바(java)] 9251 : LCS / 동적 계획법 1 (0) | 2020.06.20 |
[백준(Baekjoon)][자바(java)] 2565 : 전깃줄 / 동적 계획법 1 (0) | 2020.06.20 |
[백준(Baekjoon)][자바(java)] 11054 : 가장 긴 바이토닉 부분 수열 / 동적 계획법 1 (0) | 2020.06.20 |