删除并获得点数
另类打家劫舍问题:
选择第i个数, 那么i+1, 和i-1都不可以选
对nums数列进行木桶排序,
dp[i]= max(dp[i - 2] + cnt[i] * i, dp[i - 1])
//选择上两个数, 那么这个数就可以选, 选择上一个数, 那么这个数就不能选了
const int N = 1e4 + 10;
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
int n = nums.size();
vector<int> cnt(N, 0);
for(int i = 0; i < n; i ++)
{
cnt[nums[i]] ++;
}
vector<int> dp(N, 0);
dp[1] = cnt[1];
int res = 0;
for(int i = 2; i < N; i ++)
{
dp[i] = max(dp[i - 2] + cnt[i] * i, dp[i - 1]);
res = max(res, dp[i]);
}
return res;
}
};

浙公网安备 33010602011771号