class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        int maxnum=0;
        int trans[10001]={0};
        for(int i:nums){
            trans[i]+=i;
            maxnum=max(maxnum,i);
        }
        int dp[maxnum+1];
        dp[0]=trans[0];
        dp[1]=max(trans[1],trans[0]);
        for(int i=2;i<=maxnum;i++){
            dp[i] = max(dp[i - 1], dp[i - 2] +trans[i]);
        }
        return dp[maxnum];
    }
};