首页 » 技术分享 » A. Boredom

A. Boredom

 

A. Boredom

题解:简单DP,用a数组保存每个数字各自出现了几次,然后对于ans[i]如果选择了这个数那么之前的只能选择ans[i-2]+i*a[i],或者之前的ans[i-1]

#include <iostream>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
const int inf = 0x7f7f7f7f;

ll a[N];
ll ans[N];

int main(){
    int n;cin >> n;
    int ans1 = 0,ans2 = 0;
    for(int i = 1;i <= n;i++){
        int x;cin >> x;
        a[x]++;
    }
    ans[1] = a[1];
    for(int i = 2;i <= 100002;i++){
        ans[i] = max(ans[i-1],ans[i-2]+i*a[i]);
//        cout<<ans[i]<<endl;
    }
    cout<<ans[100002]<<endl;
    return 0;
}

转载自原文链接, 如需删除请联系管理员。

原文链接:A. Boredom,转载请注明来源!

0