Codeforces Boredom(dp)

在这里插入图片描述
题目大意:
给定一个数组,从中删除数字,如果一次操作为删除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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章