In this HackerEarth Maximum Sum problem solution, we have given an array A of N integers. Now, you have to output the sum of unique values of the maximum subarray sum of all the possible subarrays of the given array A.
HackerEarth Maximum Sum problem solution.
#include <bits/stdc++.h>
using namespace std;
const int N = 5E3 + 5;
long long a[N];
set<long long> st;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
for(int i = 0; i < n; i ++)
cin >> a[i];
long long msf, cur;
for(int i = 0; i < n; i ++) {
for(int j = i; j < n; j ++) {
if(j == i) {
msf = a[j];
cur = a[j];
st.insert(a[j]);
} else {
cur = max(a[j], cur + a[j]);
msf = max(msf, cur);
st.insert(msf);
}
}
}
long long ans = 0;
for(auto i : st)
ans += i;
cout << ans;
return 0;
}
Second solution
#include<bits/stdc++.h>
#define LL long long int
#define M 1000000007
#define endl "\n"
#define eps 0.00000001
LL pow(LL a,LL b,LL m){LL x=1,y=a;while(b > 0){if(b%2 == 1){x=(x*y);if(x>m) x%=m;}y = (y*y);if(y>m) y%=m;b /= 2;}return x%m;}
LL gcd(LL a,LL b){if(b==0) return a; else return gcd(b,a%b);}
LL gen(LL start,LL end){LL diff = end-start;LL temp = rand()%start;return temp+diff;}
using namespace std;
LL dp[50001];
set<LL> s;
int a[5001];
int main()
{
ios_base::sync_with_stdio(0);
int n;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 1; i <= n; i++){
LL mx = -1000000000;
for(int j = i; j <= n; j++){
if(dp[j - 1] < 0){
dp[j] = a[j];
}
else{
dp[j] = dp[j - 1] + a[j];
}
mx = max(mx , dp[j]);
s.insert(mx);
}
for(int j = i; j <= n; j++){
dp[j] = 0;
}
}
LL ans = 0;
for(LL i: s){
ans += i;
}
cout << ans;
}
0 Comments