# PBinfo #3579 – S_maxim – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Fie un vector cu n elemente numere naturale. 

Cerința
Determinați suma maximă care se poate obține prin adunarea valorilor care nu se află pe poziții consecutive în vector.

Date de intrare
Fișierul de intrare smax.in conține pe prima linie numărul n, care reprezintă numărul de valori din vector. Pe a doua linie a fișierului se află cele n elemente ale vectorului. 

Date de ieșire
Fișierul de ieșire smax.out va conține pe prima linie numărul S, reprezentând suma maximă care se poate obține din adunarea valorilor care nu se află pe poziții consecutive.

Restricții și precizări

1 ≤ n ≤ 100.000
numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000

Exemplu:
smax.in

4
1 4 5 4
smax.out

8
Explicație
Suma maximă este 8 și se obține din valorile aflate pe pozițiile 2 și 4.

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("smax.in");
ofstream g("smax.out");
long long a[100002],v[100002],s[100002];
int main()
{int n,i;
f>>n;
for(i=1;i<=n;i++)
    f>>v[i];
a[0]=0;
a[1]=1;
for(i=2;i<=n;i++)
    if(a[i-1]>a[i-2]+v[i])
    a[i]=a[i-1];
else a[i]=a[i-2]+v[i];
i=n;
while(i>=1)
{    if(a[i-1]>=a[i-2]+v[i])
        i--;
    else
    {
        s[i]=1;
        i=i-2;
    }
}/*
for(i=1;i<=n;i++)
    g<<v[i]<<" ";
    g<<endl;
for(i=1;i<=n;i++)
    g<<a[i]<<" ";
    g<<endl;
for(i=1;i<=n;i++)
    g<<s[i]<<" ";
    g<<endl;*/
    g<<a[n];
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3579)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3579/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3579/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
