[1912] 연속합

less than 1 minute read

풀이

dp[i] = i번째 값을 포함하는 가장 큰 연속합

정답 : dp[1:n] 중 가장 큰 값

dp[i] = max(dp[i-1] + v[i], v[i])

현재 값을 포함해서 가장 많이 연속해서 더한 것보다, 지금 하나만 더한 것이 더 큰지 아닌지 판단.

코드

#include <cstdio>
#include <algorithm>
using namespace std;
int v[100001];
int dp[100001];
int n;

int main(void) {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &v[i]);
		dp[i] = v[i];
	}
	
	for (int i = 2; i <= n; i++) {
		dp[i] = dp[i - 1] + v[i] > v[i] ? dp[i - 1] + v[i] : v[i];
	}
	printf("%d\n", *max_element(dp + 1, dp + n + 1));

	return 0;
}

Tags:

Categories:

Updated: