각 수를 더했을 때 가장 큰 수가 나오는 연속된 부분을 찾는 알고리즘
Dynamic Programming의 일종으로 수열 Algorithm의 기초다.
연속된 최대합을 구하는데 많이 사용된다.
#include<iostream>
#include<vector>
#include<algorithm>
int kadane (vector<int> arr){
int cur=0;
int big=arr[0];
for(int i=0; i<arr.size(); i++){
cur=max(cur+arr[i], arr[i]);
if(big<cur){
big=cur;
}
}
return big;
}
현재 인덱스를 i라고 한다면 a~i까지의 합을 유지하거나 i~의 새로운 합을 만들거나를 선택한다.
어떤 연속된 부분 집합이나 array를 선택해야할 때 많이 사용한다.