# 풀이
앞에서 부터, 차례로 값을 더해 온 값들 중 최대가 되는 값(tmp)과, 새로운 값(dp[i])를 비교하여,
더 큰 값을 tmp에 저장하여 출력
# 소스코드
#include <iostream>
#include <algorithm>
using namespace std;
long long arr[100001];
long long dp[100001];
int main() {
int n;
long long tmp;
//input
cin >> n;
for (int i = 0;i <= n;i++) {
cin >> arr[i];
}
//init
dp[0] = arr[0];
tmp = arr[0];
//cal
for (int i = 1;i < n;i++) {
dp[i] = max(dp[i - 1] + arr[i], arr[i]);
tmp = max(dp[i], tmp);
}
cout << tmp;
return 0;
}
# 문제 출처
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
'Programming > PS' 카테고리의 다른 글
[백준/BOJ] C언어/C++ 1157번 단어 공부 (strupr 에러) (0) | 2021.02.23 |
---|---|
[백준/BOJ] C언어 2675번 문자열 반복 (0) | 2021.02.21 |
[BOJ] C/C++ 11055 "가장 큰 증가 부분수열" 소스코드/풀이 (0) | 2020.12.28 |
[BOJ] C/C++ 11053 "가장 긴 증가하는 부분수열" (0) | 2020.12.28 |
[BOJ] C/C++ 2156 "포도주 시식" (0) | 2020.12.27 |
댓글