Maximum Sum of Two Non-Overlapping Subarrays
Maximum Sum of Two Non-Overlapping Subarrays
Two non-overlapping subarrays with fixed lengths. Both lengths are given.
We handle two cases: long interval first, short interval second; and long interval second, short interval first.
int maxSumTwoNoOverlap(vector<int>& A, int l, int m) {
int ans=0;
int n=A.size();
// Preprocess so we can get range sums quickly
vector<int> sum(n+1, 0);
for(int i=0;i<n;++i) {
sum[i+1]=sum[i]+A[i];
}
// Fix first interval position, find second interval
for(int i=l-1;i+m<n;++i) {
for(int j=i+1;j<=n-m;++j) {
ans = max(ans, sum[i+1]-sum[i+1-l]+sum[j+m]-sum[j]);
}
}
swap(l, m);
for(int i=l-1;i+m<n;++i) {
for(int j=i+1;j<=n-m;++j) {
ans = max(ans, sum[i+1]-sum[i+1-l]+sum[j+m]-sum[j]);
}
}
return ans;
}#bruteforce #array