Pagini recente » Cod sursa (job #213822) | Cod sursa (job #1363007) | Cod sursa (job #3131849) | Cod sursa (job #2740907) | Cod sursa (job #22633)
Cod sursa(job #22633)
//Subsir consecutiv de suma maxima
#include <fstream.h>
int x[50001], smax, s,lung;
int n, i, j, i1, k;
/*
smax - suma maxima care se construieste treptat
s - suma actuala
i - pozitia de inceput a secventei maxime
j - pozitia de sfarsit
*/
void Citeste();
void Dinamic();
void Scrie();
int main()
{
Citeste();
Dinamic();
Scrie();
return 0;
}
void Citeste()
{
ifstream f("secv2.in");
f >> n>>lung;
for ( int i = 1; i <= n; i++ )
f >> x[i];
f.close();
}
void Scrie()
{
ofstream g("secv2.out");
if ( smax > 0 ) g << i<<" " <<j<<" "<< smax;
g.close();
}
void Dinamic()
{
s = 0; smax = 0;
i1 = 1;
for ( k = 1; k <= n; k++ )
if ( x[k] + s > smax )
{
s += x[k];
smax = s;
i = i1;
j = k;
}
else
if ( x[k] + s > 0 ) // numerele negative se iau in secventa
s += x[k]; // numai daca ea nu devine 0 sau < 0
else
{
s = 0;
i1 = k + 1;
}
}