数组a存储元素,number存储每个相应的值有多少个,score[i]存储元素i的分数。
具体细节在代码中。
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll n;
ll a[110000],number[110000],score[110000];
ll maxx=0;
int main()
{
cin>>n;
for(int i=0;i<110000;i++)//初始化
{
a[i]=number[i]=score[i]=0;
}
for(int i=0;i<n;i++)
{
cin>>a[i];
number[a[i]]++;//记录值为a[i]的元素个数
}
sort(a,a+n);//从小打到大排序
for(ll i=a[0];i<=a[n-1];i++)
{
score[i]=max(score[i-1],score[i-2]+i*number[i]);
maxx=max(maxx,score[i]);//保存当下的最大分数
}
cout<<maxx<<'\n';
}