습관처럼
백준 1912 - 연속합 본문
https://www.acmicpc.net/problem/1912
문제 설명
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 |