Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// https://trello.com/c/AW7GWhYJ/6-problem-455a-codeforces
- /// http://codeforces.com/contest/455/problem/A
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #define ll long long
- using namespace std;
- vector <ll> t;
- ll calcular()
- {
- ll Uso = 0, New_Uso;
- ll Dejo = 0, New_Dejo;
- for (int i=0; i<t.size(); i++)
- {
- New_Uso = Dejo + t[i]; ///si uso ese numero, es porque lo sume a lo que no habia usado
- New_Dejo = max(Uso, Dejo); ///si no uso ese numero, me quedo con el mejor resultado anterior
- Uso = New_Uso;
- Dejo = New_Dejo;
- }
- t.clear();
- return max(Uso, Dejo);
- }
- int main()
- {
- int n;
- cin>>n;
- vector <int> v (n);
- for (int i=0; i<n; i++)
- cin>>v[i];
- sort ( v.begin(), v.end() );
- reverse ( v.begin(), v.end() );
- t.push_back( v[0] );
- ll resultado = 0;
- int num, ant;
- for (int i=1; i<n; i++)
- {
- num = v[i];
- ant = v[i-1];
- if (ant == num) ///si tengo dos numeros iguales seguidos, aumento el sumador de ese numero
- t.back()+=num;
- else //y si tengo dos numeros consecutivos distintos...
- {
- if (ant != num+1) ///si uno no es el siguiente del otro, entonces comparo la secuencia hasta ahí
- resultado += calcular();
- t.push_back(num); ///en ambos casos, añado un contador de ese nuevo numero
- }
- }
- resultado += calcular();
- cout<<resultado;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment