백준 1912 - 연속합(maximum sum)
문제
백준 1912 - 연속합 풀러가기
문제 분석
이 문제도 유명한 문제다 maximum sum이라고 한다.
한 시점에서 과거의 maximum 값은 변함 없으므로, dynamic programming 으로 풀 수 있다.
한 시점의 값을 더했을 때, 이전의 연속합보다 작아진다면 현재 시점에서 새로운 연속을 시작하는게 낫다. 이를 이용하여 문제를 풀면 된다.
문제 풀이(C++)
-
전체 코드
12345678910111213141516171819202122232425262728293031323334#include <cstdio>#include <vector>#include <algorithm>using namespace std;int main() {int n;scanf("%d", &n);vector<int> a(n);vector<int> d(n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);}d[0] = a[0];for (int i = 1; i < n; i++) {if (d[i - 1] + a[i] < a[i]) {d[i] = a[i];}else {d[i] = d[i - 1] + a[i];}}printf("%d", *max_element(d.begin(), d.end()));return 0;}cs
연관 문제
아직 배움의 과정에 있는 학생이니 내용에 부족한 점이 보이면 지적은 하되, 비난은 하지 말아주세요!!
댓글남기기