Cod sursa(job #646074)

Utilizator tak3rStefan Mirea tak3r Data 10 decembrie 2011 19:47:25
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

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

struct sumInfo getSumInfo( int start, int length, int value ){
  struct sumInfo elem;
  elem.start  = start;
  elem.length = length;
  elem.value  = value;
  return elem;
}

void ssm( vector<int> a ){
  vector< struct sumInfo > dp;
  int n = a.size();
  int max;
  int i;
  
  dp.push_back( getSumInfo( 0, 1, a[0] ) );
  for( i=1; i<n; ++i ){
    if( dp[i-1].value+a[i] >= a[i] ){
       dp.push_back( getSumInfo( dp[i-1].start, dp[i-1].length+1, dp[i-1].value+a[i] ) );
    } else {
      dp.push_back( getSumInfo( 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 );
  
  ifstream in( "ssm.in" );
  ofstream out( "ssm.out" );
  
  int n;
  in >> n;
  int tmp;
  vector<int> a;
  for( int i=0; i<n; ++i ){
    in >> tmp;
    a.push_back( tmp );
  }
  
  ssm( a );
  
  return 0;
  
}