Cod sursa(job #999529)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 20 septembrie 2013 17:29:04
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

#define In "oo.in"
#define Out "oo.out"

#define Nmax 100005
/**
avem 3 cazuri :
1.luam elementele de pe pozitiile 1 si 2
2.luam elementele de pe pozitiile 2 si 3
3.luam elementele de pe pozitiile 3 si 4
*/
using namespace std;
int dp[4][Nmax],a[Nmax];
int n;
inline void Read()
{
    ifstream f(In);
    f>>n;
    int i;
    for(i = 1;i <= n; ++i)
        f>>a[i];
    f.close();
}

inline void Solve()
{
    int i;
    dp[0][2] = a[1] + a[2];
    dp[1][3] = a[2] + a[3];
    dp[2][4] = a[3] + a[4];
    for(i = 3;i < n; ++i)
        dp[0][i] = max(dp[0][i-1],dp[0][i-3] + a[i-1] + a[i]);
    dp[0][n] = dp[0][n-1];
    for(i = 4;i <= n; ++i)
        dp[1][i] = max(dp[1][i-1],dp[1][i-3] + a[i-1] + a[i]);
    a[n+1] = a[1];
    for(i = 5;i <= n+1; ++i)
        dp[2][i] = max(dp[2][i-1],dp[2][i-3] + a[i-1] + a[i]);
    dp[2][n] = dp[2][n+1];
}

inline void Write()
{
    ofstream g(Out);
    g<<max(max(dp[0][n],dp[1][n]),dp[2][n])<<"\n";
    g.close();
}
int main()
{
    Read();
    Solve();
    Write();
    return 0;
}