Cod sursa(job #1789406)

Utilizator SenibelanMales Sebastian Senibelan Data 26 octombrie 2016 22:50:01
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#define VECMAX 6000007


using namespace std;

int v[VECMAX], n, sol, dp[VECMAX], indice = 1;

ifstream in("ssm.in");
ofstream out("ssm.out");

void Read(){
  in >> n;
  for(int i = 1; i <= n; ++i)
    in >> v[i];
}

void Solve(){
  sol = dp[1] = v[1];
  for(int i = 1; i <= n; ++i){
    dp[i] = max(dp[i - 1] + v[i], v[i]);
    if(sol < dp[i]){
      sol = dp[i];
      indice = i;
    }
  }
}

void Print(){
  int j, auxsum, minim = n;
  for(int i = 1; i <= n; ++i){
    if(dp[i] == sol){
      auxsum = sol;
      j = indice;
      while(auxsum){
	auxsum -= v[j];
	j--;
      }
      if(indice - j + 1 < minim){
	indice = i;
	minim = j + 1;
	sol = dp[i];
      }
    }
  }
  out << sol << " " << minim << " " << indice << "\n";
}


int main(){
  Read();
  Solve();
  Print();
  return 0;
}