-
[백준] 1912번 연속합알고리즘/백준 2021. 8. 22. 23:48
풀이
점화식 d[i]는 i번째 요소까지의 연속합의 최대 값입니다. 문제에서 수는 한 개 이상 선택해야 한다고 했으므로 d[i-1]번째 수와 arr[i]를 더했을 때의 값이 arr[i]의 값보다 작다면 i번째 요소인 arr[i] 자체가 연속합의 최대 값이 됩니다. 그러므로 다음과 같은 점화식을 세울 수 있습니다. answer의 초기 값이 -100000000인 이유는 요소에 음수 값이 있을 수 있기 때문입니다.
d[i] = max(d[i-1] + arr[i], arr[i])
코드
#include <cstdio> int max(int a, int b) { return a > b ? a : b; } int main() { int N; scanf("%d", &N); int d[100001] = {}; int arr[100001] = {}; int answer = -100000000; for (int i = 1; i <= N; ++i) { scanf("%d", &arr[i]); d[i] = max(d[i - 1] + arr[i], arr[i]); answer = max(d[i], answer); } printf("%d", answer); }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2156번 포도주 시식 (0) 2021.08.23 [백준] 2748번 피보나치 (0) 2021.08.23 [백준] 11053번 가장 긴 증가하는 부분 수열 (0) 2021.08.19 [백준] 1932번 정수 삼각형 (0) 2021.08.18 [백준] 2579번 계단 오르기 (0) 2021.08.18