sia su linux che su windows gli int sono da 4 byte, ergo l'array è grande 4 milioni di byte, circa 3.8.. MB
Ora non ditemi che è troppo per un sistema da 16GB dove tre quarti della memoria sono liberi
Da quel che ricordo costanti a parte, il C++ allocava tutto quello che è statico e automatico in stack, mentre tutto quello che è allocato dinamicamente in heap.
ebbene mi da stack overflow (almeno così dice il debugger) se provo ad allocare l'array come variabile automatica, ovvero in stack.
Se lo alloco staticamente (compreso come variabile globale) o dinamicamente l'array nessun problema.
Qua allego il codice:
Codice: Seleziona tutto
/*Data una sequenza di interi A[1..N], vogliamo scegliere una sottosequenza A[I..J] tale che la somma dei propri elementi sia massima fra tutte le sottosequenze. Quale ´e la massima somma che siamo in grado di ottenere? */
#include <fstream>
int maxSubArray( int myArray[ ], const int& dimension );
int main( )
{
int dimension = 0;
// int myArray[ 1000000 ];
std::ifstream inputFile("input.txt");
inputFile >> dimension;
int* myArray = new int[ dimension ];
for( int i = 0; i < dimension; i++ )
{
inputFile >> myArray[ i ];
}
inputFile.close( );
std::ofstream outputFile( "output.txt" );
outputFile << maxSubArray( myArray, dimension );
outputFile.close( );
return( 0 );
}
int maxSubArray( int myArray[ ], const int& dimension )
{
int maxValue = 0;
int currentValue = 0;
for( int i = 0; i < dimension; i++ )
{
if( ( currentValue + myArray[ i ] ) > 0 )
{
currentValue += myArray[ i];
}
else
{
currentValue = 0;
}
if( currentValue > maxValue )
{
maxValue = currentValue;
}
}
return( maxValue );
}