Cod sursa(job #2852042)

Utilizator AxicaVirtosu Alexandra Mihaela Axica Data 19 februarie 2022 11:14:52
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

#include <climits>
using namespace std;
ifstream fin ("ssm.in");
ofstream fout ("ssm.out");

int n, maxim=INT_MIN, i_sol, j_sol, x;
struct dinamica
{
    int suma;
    int inceput;
}dp[6000001];
int main()
{
    ///dp[i].suma=suma maxima a unei subsecvente care se termina pe poz i
    ///dp[i].inceput=inceputul subsecventei de suma maxima care se termina pe poz i
    fin>>n>>x;
    dp[1].suma=x;
    dp[1].inceput=1;
    for(int i=2; i<=n; i++)
    {
        fin>>x;
        ///dp[i]=max(dp[i-1]+x, x) care explicitat este urm lucru:
        if(dp[i-1].suma<0)
            dp[i].suma=x, dp[i].inceput=i;
        else
            dp[i].suma=dp[i-1].suma+x, dp[i].inceput=dp[i-1].inceput;
    }
    for(int i=1; i<=n; i++)
        {
            if(dp[i].suma>maxim)
            {
                maxim=dp[i].suma;
                i_sol=dp[i].inceput;
                j_sol=i;
            }
        }
    fout<<maxim<<" "<<i_sol<<" "<<j_sol;

    return 0;
}