Cod sursa(job #467485)

Utilizator rurryRuxandra Nistor rurry Data 29 iunie 2010 00:48:17
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>

int main()
{
    int n, x, sum, i, best_sum = -20000, fst, last, *v, best_fst;
    //se citesc datele 
    FILE * fin = fopen ("ssm.in", "r");
    fscanf(fin, "%d", &n);
    v = (int *) malloc (n * sizeof(int));
    for(i = 0; i < n; i++)
          fscanf(fin, "%d", v + i);
    fclose(fin);
          
    //suma initiala e v[0]
    sum = v[0];
    fst = 0;
    last = 0;
    //se parcurge vectorul
    for(i = 1; i < n; i++)
    {
          x = v[i];
          //daca suma e mai mica decat 0 => se porneste subsirul
          //primul indice = i
          //suma = x (cea mai buna suma e in best_sum si dintr-o suma negativa n-ai decat cum sa scazi..
          //daca x-ul e pozitiv suma + x < x => vrem sa retinem suma
          //daca x=ul e negativ suma + x < x (ca e x - ceva pozitiv, suma fiind negativa) 
          
          
          //luati pe un exemplu.. si unde setati fst deschideti interval        
          if (sum < 0)
          {
                  fst = i;
                  sum = x;
          }
          
          else
          //altfel - se adauga x la suma
                  sum += x;
                  
        //daca suma curenta e mai buna decat cea mai buna de pana acum - se retine
          if(best_sum < sum)
          {
                  best_sum = sum;
                  best_fst = fst;
                  last = i;
          }                                          
    }
    FILE *fout = fopen("ssm.out", "w");
    for(i = best_fst; i <= last; i++)
        fprintf(fout, "%d ", v[i]);
    fclose(fout);
  //  getch();
    return 0;
}