1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
문제
크기가 n인 정수 배열에서 연속된 수의 합이 가장 큰 값을 출력하라.
풀이
i번까지의 연속 수 합이 가장 큰 dp[i]를 이용해 다이나믹 프로그래밍으로 푼다.
dp[i]는 dp[i-1]+arr[i]와(i-1번째까지 연속 수 합이 가장 큰 수+i번째 배열의 수) arr[i]를 비교해 더 큰 값이 dp[i]에 들어간다.
소스코드
#include<iostream>
using namespace std;
int main(void){
int n;cin>>n;
int arr[n+1];
for(int i=1;i<=n;i++)
cin>>arr[i];
int dp[n+1]; dp[0]=0;
int max_num=-1000;
for(int i=1;i<=n;i++){
dp[i]=max(dp[i-1]+arr[i],arr[i]);
max_num=max(max_num,dp[i]);
}
cout<<max_num<<endl;
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/C++]1699번 제곱수의 합 (0) | 2020.08.18 |
---|---|
[BOJ/C++]2579번 계단오르기 (0) | 2020.08.18 |
[BOJ/C+]11054 가장 긴 바이토닉 부분 수열 (0) | 2020.07.29 |
[BOJ/C++]11722번 가장 긴 감소하는 부분 수열 (0) | 2020.07.29 |
[BOJ/C++]11055번 가장 큰 증가 부분 수열 (0) | 2020.07.29 |
댓글