题目链接:
题目描述:
思路解析:
这道题与我们之前做过的 相似,我们思考可不可以用同一种方法来解题呢?
我们把这个一维数组用 dp表 来记录,用 g 表示选择当前位置,用 f 表示不选择当前位置
此时,我们就可以列出状态转移方程了:
g[ i ] = f[ i - 1 ] + dp[ i ];
f[ i ] = max( f[ i - 1 ], g[ i - 1 ] );
代码如下:
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
const int n = 10001;
vector<int> dp(n);
for(auto x:nums) dp[x] += x;
vector<int> f(n);
auto g=f;
for(int i =1;i<n;i++)
{
g[i] = f[i-1] + dp[i];
f[i] = max(f[i-1],g[i-1]);
}
return max(f[n-1],g[n-1]);
}
};