思路——(打家劫舍4?)
一開始看到左右都受影響就想到了Leetcode-312 戳氣球,但是後來才發現這就是
打家劫舍
鴨!!!
只要你選用了a,那麼a-1和a+1都和你無關了,那麼肯定是要貪心的選全部的a纔對得起損失。
問題轉化爲對於每一個元素,不能選它的臨近值(不能偷隔壁),聯動成功!
具體代碼
1.將nums數組最大值求出mm
2.開一個mm+1大小的value數組,value[mm]表示mm的個數
3.dp計算打家劫舍,遞推dp[i]=max(dp[i-2]+i*value[i],dp[i-1]);
代碼
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
if(nums.size()==0) return 0;
if(nums.size()==1) return nums[0];
int mm=0;
for(int i=0;i<nums.size();i++)
{
mm=max(mm,nums[i]);
}
vector<int> value(mm+1,0);
for(int i=0;i<nums.size();i++)
{
value[nums[i]]++;
}
vector<int> dp(value.size(),0);
dp[0]=0;
dp[1]=value[1];
for(int i=2;i<value.size();i++)
{
dp[i]=max(dp[i-2]+i*value[i],dp[i-1]);
}
return dp[dp.size()-1];
}
};