Cod sursa(job #645866)

Utilizator tak3rStefan Mirea tak3r Data 10 decembrie 2011 17:49:26
Problema Subsecventa de suma maxima Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#include<cstdlib>
#include<cstring>

using namespace std;

struct sumInfo{
  int start;
  int length;
  int value;
  
  sumInfo(){
    start   = -1;
    length  = 0;
  }
};

void setSumInfo( struct sumInfo &elem, int start, int length, int value ){
  elem.start  = start;
  elem.length = length;
  elem.value  = value;
}

void ssm( int a[], int n ){
  sumInfo dp[n];
  int max;
  int i;
  
  setSumInfo( dp[0], 0, 1, a[0] );
  for( i=1; i<n; ++i ){
    if( dp[i-1].value+a[i] > a[i] ){
      setSumInfo( dp[i], dp[i-1].start, dp[i-1].length+1, dp[i-1].value+a[i] );
    } else {
      setSumInfo( dp[i], i, 1, a[i] );
    }
  }
  
  max = 0;
  for( i=1; i<n; ++i ){
    if( dp[i].value > dp[max].value ){
      max = i;
    }
  }
  printf( "%d %d %d", dp[max].value, dp[max].start+1, max+1 );
}

int main(){
  
  freopen( "ssm.in", "r", stdin );
  freopen( "ssm.out", "w", stdout );
  
  int n;
  scanf( "%d", &n );
  int a[n];
  for( int i=0; i<n; ++i ){
    scanf( "%d", &a[i] );
  }
  
  ssm( a, n );
  
  return 0;
  
}