Cod sursa(job #995875)
| Utilizator | Data | 10 septembrie 2013 13:42:41 | |
|---|---|---|---|
| Problema | Subsecventa de suma maxima | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.57 kb |
#include <iostream>
#include <fstream>
#include <climits>
#define nmax 6000001
using namespace std;
ifstream in("ssm.in");
ofstream out("ssm.out");
int n,i,v[nmax],dp[nmax],pozi,maxim=-INT_MAX;
int main(){
in >> n;
for (i=1; i<=n; i++)
in >> v[i];
dp[n]=v[n];
for (i=n-1; i>=1; i--){
dp[i]=max(dp[i+1]+v[i], v[i]);
if (dp[i]>=maxim) pozi=i, maxim=dp[i];
}
i=pozi;
while (maxim!=0)
maxim-=v[i], i++;
out << dp[pozi] << " " << pozi << " " << i-1;
return 0;
}
