C언어

백준 1912 연속합 문제 *max_element(d + 1, d + n + 1); 사용

mcdn 2021. 1. 23. 18:07
반응형

www.acmicpc.net/problem/1912

연속합 성공분류

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 (추가 시간 없음) 128 MB 76265 23168 15994 29.621%

문제

n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.

예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.

입력

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

출력

첫째 줄에 답을 출력한다.

예제 입력 1 복사

10 10 -4 3 1 5 6 -35 12 21 -1

예제 출력 1 복사

33

예제 입력 2 복사

10 2 1 -4 3 4 -4 6 5 -5 1

예제 출력 2 복사

14

예제 입력 3 복사

5 -1 -2 -3 -4 -5

예제 출력 3 복사

-1

#include <iostream>
#include <algorithm>
using namespace std;

int arr[100005];
int d[100005];

int main(void)
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> arr[i];
	d[1] = arr[1];
	for (int i = 2; i <= n; i++)
	{
		d[i] = max(d[i -1], 0) + arr[i];
	}
	cout << *max_element(d + 1, d + n + 1);

}


// int main(void)
// {
// 	int n;
// 	cin >> n;

// 	int num; // input
// 	int inner_sum;
// 	int maxsum;

// 	cin >> num;
// 	if (n == 1)
// 	{
// 		cout << num;
// 		return (1);
// 	}
// 	inner_sum = num;
// 	maxsum = num;
// 	for (int i = 1; i < n; i++)
// 	{
// 		cin >> num;
// 		if (num >= 0) // update inner_sum
// 		{
// 			inner_sum += num;
// 		}
// 		else // num < 0 so update maxsum
// 		{
// 			if (inner_sum > maxsum)
// 				maxsum = inner_sum;
// 			inner_sum = 0;
// 		}

// 	}
// 	cout << maxsum;
// }

처음에는 연속합이라는게 마이너스 값 나오면 처음 부터 다시 합해줘야할 줄 알았는데 그게 아니라 그냥 뭉텅이로 더해서 크면 되는 거였음 그래서 max( , 0) 0이랑 비교하는 것!! 

 

 

www.acmicpc.net/source/share/645f1b8f53034a41b486d65a98303bf2

 

공유 소스 보기

 

www.acmicpc.net

위의 공유 소스 참고했다. 

 

blog.encrypted.gg/737?category=773649

 

[실전 알고리즘] 0x09강 - 다이나믹 프로그래밍_구버전

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 현재 보고있는 강..

blog.encrypted.gg

강의는 여기 참고 

반응형