https://www.acmicpc.net/problem/1912
[필자 사고]
연속합 문제이다.
시간복잡도를 측정하기 위해 문제에서 주어진 N의 크기를 본 결과 N=100000이다.
즉 시간복잡도 n^2 인 형태로 코드를 짜면 안된다.
잠시 고민해본 결과 다이나믹 프로그래밍이 떠올라 해당 코드를 작성했다.
필자는 Dynamic 이라는 배열을 만들었고 Dynamic의 들어가는 숫자는 arr의 숫자들 중
순서대로 합해서 최대가 되는 숫자들만 넣는 형식으로 정의했다.
[소스 코드]
#include<iostream>
#include <vector>
using namespace std;
int N;
vector<int> arr;
vector<int> Dynamic;
int maxNum = -111111;
void Input() {
cin >> N;
arr.resize(N);
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
}
void Solve() {
Dynamic.resize(N);
Dynamic[0] = arr[0];
maxNum = arr[0];
for (int i = 1; i < N; i++) {
Dynamic[i] = max(Dynamic[i - 1] + arr[i], arr[i]);
maxNum = max(maxNum, Dynamic[i]);
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
Solve();
cout << maxNum;
}
'백준 > 동적프로그래밍' 카테고리의 다른 글
백준 c++ 11727 "2×n 타일링 2" -PlusUltraCode- (0) | 2024.05.02 |
---|---|
백준 c++ 11053 "가장 긴 증가하는 부분 수열" -PlusUltraCode- (0) | 2024.05.01 |
백준 9251 c++ -[PlusUltraCode] (0) | 2024.02.22 |
백준 1328 c++ -고층 빌딩 (1) | 2024.02.15 |
백준 1915 c++ - 가장 큰 정사각형 (1) | 2024.02.13 |