Solução Informática Avançado - Semana 47

Solução de Frederico Bulhões

Para resolver esse problema podemos usar um algoritmo conheciodo como algoritmo de Sublista Contígua de Soma Máxima, usando o algoritmo de Kadane.

Em resumo o algoritmo de Kadane calcula a maior soma terminando em cada posição do vetor, usando programação dinâmica, e por fim calcula o máximo desses máximos.

Código para melhor entendimento:


// codigo de Larissa Mesquita
#include <iostream>
using namespace std;
#define MAX 50010
int v[MAX], n;
int f(){
int atual=0, maior=0;
for(int i=0;i<n;i++){
atual=max(0, atual+v[i]);
maior=max(maior, atual);
}
return maior;
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
cin>>v[i];
cout<<f()<<endl;
}

view raw

corredor.cpp

hosted with ❤ by GitHub