알고리즘
BOJ [1912] 연속합
감동이중요해
2017. 9. 10. 20:06
https://www.acmicpc.net/problem/1912
1. 분류
다이나믹 프로그래밍
2. 풀이
숫자를 여러 개 주고 연속된 숫자들의 합 중 가장 큰 값을 도출해내는 문제이다.
다이나믹 프로그래밍으로 해결했다.
첫 숫자부터 끝 숫자까지 순회면서 (dp+현재 값)과 현재값 중 큰 값을 남긴다.
그리고 다시 처음부터 최고값을 찾는다.
3. 소스코드
#include <cstdio> #define max(a, b) (a) > (b) ? (a) : (b) int num[100000]; int dp[100000]; int main() { int n, ans; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &num[i]); dp[0] = num[0]; ans = dp[0]; for (int i = 1; i < n; i++) dp[i] = max(dp[i - 1] + num[i], num[i]); for (int i = 0; i < n; i++) ans = max(ans, dp[i]); printf("%d\n", ans); return 0; }