力扣OJ 740. 刪除與獲得點數

給定一個整數數組 nums ,你可以對它進行一些操作。

每次操作中,選擇任意一個 nums[i] ,刪除它並獲得 nums[i] 的點數。之後,你必須刪除每個等於 nums[i] - 1 或 nums[i] + 1 的元素。

開始你擁有 0 個點數。返回你能通過這些操作獲得的最大點數。

示例 1:

輸入: nums = [3, 4, 2]
輸出: 6
解釋: 
刪除 4 來獲得 4 個點數,因此 3 也被刪除。
之後,刪除 2 來獲得 2 個點數。總共獲得 6 個點數。
示例 2:

輸入: nums = [2, 2, 3, 3, 3, 4]
輸出: 9
解釋: 
刪除 3 來獲得 3 個點數,接着要刪除兩個 2 和 4 。
之後,再次刪除 3 獲得 3 個點數,再次刪除 3 獲得 3 個點數。
總共獲得 9 個點數。
注意:

nums的長度最大爲20000。
每個整數nums[i]的大小都在[1, 10000]範圍內。

 

 

class Solution {
public:
    int s[10001];
    int ans[10001];
    int dp(int k)
    {
        if(k<0)return 0;
        if(ans[k])return ans[k];
        return ans[k]=max(s[k]+dp(k-2),dp(k-1));
    }
    int deleteAndEarn(vector<int>& nums) {
        if(nums.size()==0)return 0;
        memset(ans,0,sizeof(int)*10001);
        memset(s,0,sizeof(int)*10001);
        for(int i=0;i<nums.size();i++)s[nums[i]]+=nums[i];
        return dp(10000);
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章