题目大意:
给定一个数组,从中删除数字,如果一次操作为删除k,则k-1和k+1也被删除,此次操作的得分为k,问当数组中的数完全被删除时最高得分为多少
解题思路:
考虑到an的范围,可以令arr[i]为操作到数i时的最大得分,则有arr[i]=max(arr[i-2]+arr[i],arr[i-1])
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
ll arr[maxn];
int n,k;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&k),arr[k]+=k;
for(int i=2;i<=100001;++i)
arr[i]=max(arr[i-2]+arr[i],arr[i-1]);
printf("%lld",arr[100000]);
return 0;
}