습관처럼

백준 1912 - 연속합 본문

Algorithms/BOJ

백준 1912 - 연속합

dev.wookii 2020. 4. 8. 09:44

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

 

1912번: 연속합

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

www.acmicpc.net

문제 설명


n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.

 

 

접근 방법


앞에서 하나씩 증가시키면서 최대값을 저장한다. 

즉 DP[i] = max(number[i], number[i]+DP[I-1])

DP에는 이전까지의 수열의 최대값을 가지고 있는 DP함수에 현재 인덱스에 해당하는 어레이를 더한 값과 현재 어레이 값을 비교하여 최대를 저장한다.

 

 

코드


#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int number[100001];
int dp[100001];
int maxi[100001];
bool compare(int a,int b){
    return a>b;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>number[i];
    dp[0]=number[0];
    for(int i=1;i<n;i++){
        dp[i]=max(number[i],number[i]+dp[i-1]);
    }
    sort(dp,dp+n,compare);
    cout<<dp[0]<<"\n";
    return 0;
}

funny algorithm -_-;;

'Algorithms > BOJ' 카테고리의 다른 글

백준 9461 - 파도반 수열  (0) 2020.04.10
백준 11053 - 가장 긴 증가하는 부분 수열  (0) 2020.04.08
백준 1932 - 정수 삼각형  (0) 2020.04.08
백준 1157 - 단어 공부  (0) 2020.04.08
백준 2908 - 상수  (0) 2020.04.08