Cod sursa(job #3291898)

Utilizator anca.gdDumitru Anca Gabriela anca.gd Data 6 aprilie 2025 10:07:56
Problema Oo Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>

using namespace std;
ifstream fin("oo.in");
ofstream fout("oo.out");
int n, v[100001], dp[100001], dp1, dp2, dp3;
int main()
{
    fin>>n;
    for (int i=1; i<=n;i++)
        fin>>v[i];
    //exista 3 cazuri de inceput :  luam n si 1, luam 1 si 2, sau 2 si 3
    //restul se reduc la aceste 3 cazuri
    dp[n]=0;
    dp[1]=v[n]+v[1];
    dp[2]=dp[1];
    for (int i=3; i<n-1;i++)
        dp[i]=max(dp[i-1], dp[i-3]+v[i-1]+v[i]); //ori il lasam, ori il luam
    dp1=dp[n-2];
    dp[1]=0;
    dp[2]=v[1]+v[2];
    dp[3]=dp[2];
    for (int i=4; i<n;i++)
        dp[i]=max(dp[i-1], dp[i-3]+v[i-1]+v[i]);
    dp2=dp[n-1];
    dp[1]=0;
    dp[2]=0;
    dp[3]=v[2]+v[3];
    for (int i=4; i<=n;i++)
        dp[i]=max(dp[i-1], dp[i-3]+v[i-1]+v[i]);
    dp3=dp[n];
    //fout<<dp1<<' '<<dp2<<' '<<dp3<<'\n';
    fout<<max(dp1, max(dp2,dp3));
    return 0;
}