Nu aveti permisiuni pentru a descarca fisierul grader_test46.ok

Cod sursa(job #974531)

Utilizator eloredanaAlbulescu Elena-Loredana eloredana Data 17 iulie 2013 14:29:35
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb

/*
Subsecventa de suma maxima
Se dă un şir S[] = (s1, s2, .., sN) de lungime N. O subsecvenţă a şirului este de forma: (si, si+1, ..., sj) cu 1 ≤ i ≤ j ≤ N, iar suma subsecvenţei este si + si+1 + ... + sj.

Cerinţă
Se cere să se determine subsecvenţa de sumă maximă.

Date de intrare
Fişierul de intrare ssm.in conţine pe prima linie un număr natural N, reprezentând lungimea şirului. Următoarea linie conţine N numere întregi separate printr-un spaţiu, reprezentând în ordine elementele şirului.

Date de ieşire
În fişierul de ieşire ssm.out se vor tipări trei numere în această ordine: suma subsecvenţei de sumă maximă, indicele de început şi indicele de sfârşit.
*/

#include <iostream>
using namespace std;

const int LMAX = 7000005;

int n,arr[LMAX], start, finish;

int MaxSum(int arr[], int n, int &start, int &finish)
{
	int sum=0;
	int maxSum=INT_MIN;
	int local_start=1;
	finish=-1;

		for (int i=1; i<=n; i++)
		{
			sum+=arr[i];
			if (sum <0) 
			{
				sum=0;
			    local_start=i+1;
			}
			if (sum > maxSum)
			{
				maxSum=sum;
				start=local_start;
				finish=i;
			}
		}

		if (finish != -1 )
			return maxSum;

	return -1;
}


int main(int argc, _TCHAR* argv[])
{
	freopen("ssm.in","r",stdin);
	freopen("ssm.out","w",stdout);
	cin>>n;
	for(int i=1; i<=n; i++)
		cin>>arr[i];

    cout<<MaxSum(arr,n,start,finish)<<" ";
	cout<<start<<" "<<finish;

	return 0;
}