[每日一题] 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]);

    }
};
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/14730980.html