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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章