문제링크 : https://www.acmicpc.net/problem/1912
문제풀이
동적 계획법으로 쉽게 풀 수 있는 문제이다.
dp배열을 따로 만들어서, 각 자리까지의 최댓값을 저장한다.
소스코드
/*
* 백준 1912번: 연속합
*/
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 100001
int arr[MAX];
int dp[MAX];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
dp[0] = arr[0];
int max_sum = arr[0];
for (int i = 1; i < n; i++) {
// (현재 값, 현재 값 + 이전까지의 최댓값) 중 더 큰 값 저장
dp[i] = max(arr[i], arr[i] + dp[i - 1]);
if (dp[i] > max_sum) max_sum = dp[i];
}
cout << max_sum;
return 0;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
| [백준] 2178번: 미로탐색 (0) | 2019.06.20 |
|---|---|
| [백준] 1260번: DFS와 BFS (0) | 2019.06.19 |
| [백준] 1978번: 소수 찾기 (0) | 2019.06.13 |
| [백준] 1003번: 피보나치 함수 (0) | 2019.06.12 |
| [백준] 2579번: 계단 오르기 (0) | 2019.06.12 |