LeetCode每日一题 | 740. 删除并获得点数

题目链接:

740. 删除并获得点数 - 力扣(LeetCode)

题目描述:

LeetCode每日一题 | 740. 删除并获得点数_第1张图片

思路解析:

LeetCode每日一题 | 740. 删除并获得点数_第2张图片

LeetCode每日一题 | 740. 删除并获得点数_第3张图片

LeetCode每日一题 | 740. 删除并获得点数_第4张图片

LeetCode每日一题 | 740. 删除并获得点数_第5张图片

这道题与我们之前做过的  相似,我们思考可不可以用同一种方法来解题呢?
LeetCode每日一题 | 740. 删除并获得点数_第6张图片

LeetCode每日一题 | 740. 删除并获得点数_第7张图片

LeetCode每日一题 | 740. 删除并获得点数_第8张图片

LeetCode每日一题 | 740. 删除并获得点数_第9张图片

我们把这个一维数组用 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& nums) {

        const int n = 10001;
        vector dp(n);
        for(auto x:nums) dp[x] += x;

        vector f(n);
        auto g=f;

        for(int i =1;i

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,职场和发展)