Pagini recente » Diferente pentru planificare/sedinta-20080314 intre reviziile 33 si 5 | Monitorul de evaluare | Pachete | Diferente pentru planificare/sedinta-20071218 intre reviziile 7 si 8 | Cod sursa (job #3248045)
/*#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n, inc, sf, Max, auxinc;
int main()
{
fin >> n;
int v[n + 1], dp[n + 1];
for(int i = 1; i <= n; i++)
{
fin >> v[i];
}
dp[1] = v[1];
Max = dp[1];
inc = 1;
auxinc = 1;
sf = 1;
for(int i = 2; i <= n; i++)
{
if(dp[i - 1] >= 0)
{
dp[i] = dp[i - 1] + v[i];
if(dp[i] > Max)
{
inc = auxinc;
Max = dp[i];
sf = i;
}
}
else
{
dp[i] = v[i];
auxinc = i;
if(dp[i] > Max)
{
Max = dp[i];
sf = i;
}
}
}
fout << Max << " " << inc << " " << sf;
return 0;
}
*/
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n, inc, sf, Max, auxinc, difmin;
int main()
{
fin >> n;
int v[n + 1], dp[n + 1];
for(int i = 1; i <= n; i++)
{
fin >> v[i];
}
dp[1] = v[1];
Max = dp[1];
inc = 1;
auxinc = 1;
sf = 1;
for(int i = 2; i <= n; i++)
{
if(dp[i - 1] >= 0)
{
dp[i] = dp[i - 1] + v[i];
if(dp[i] > Max)
{
inc = auxinc;
Max = dp[i];
sf = i;
difmin = sf - inc;
}
else if(dp[i] == Max)
{
if(i - auxinc < difmin)
{
inc = auxinc;
Max = dp[i];
sf = i;
difmin = sf - inc;
}
}
}
else
{
dp[i] = v[i];
auxinc = i;
if(dp[i] > Max)
{
Max = dp[i];
sf = i;
}
}
}
fout << Max << " " << inc << " " << sf;
return 0;
}