其他分享
首页 > 其他分享> > [每日一题] leetcode 740. 删除并获得点数

[每日一题] leetcode 740. 删除并获得点数

作者:互联网

统计每个值所能获得的点数

dp 从终态考虑转移方程!!!

dp[i][0]表示第i个数保留

dp[i][1]表示删除第i个数

dp[n][0] = dp[n - 1][1];

dp[n][1] = max(dp[n - 2][0], dp[n - 2][1]) + a[n];

class Solution {
public:
    int dp[20010][2];
    int num[20010];
    int deleteAndEarn(vector<int>& nums) {
        memset(dp, 0, sizeof(dp));
        memset(num, 0, sizeof(num));
        int n = nums.size();
        for(int i = 0; i < n; i++)
        {
            if(num[nums[i]] == 0)
                num[nums[i]] = nums[i];
            else num[nums[i]] += nums[i];
        }
        dp[1][0] = 0;
        dp[1][1] = num[1];
        for(int i = 2; i <= 20000; i++)
        {    dp[i][0] = dp[i - 1][1];
            dp[i][1] = max(dp[i - 2][0], dp[i - 2][1]) + num[i];
        }
        return max(dp[20000][0], dp[20000][1]);

    }
};

 

标签:740,nums,int,memset,20010,num,点数,leetcode,dp
来源: https://www.cnblogs.com/WTSRUVF/p/14730980.html