题解 | #删除相邻数字的最大分数#

删除相邻数字的最大分数

https://www.nowcoder.com/practice/3bcf72c738b6494bbe1ebe0ffde56152

选中a_i,删除数组中每一个a_i+1和a_i-1的数。可以遍历1到10000中的每一个数字,出现在给定的数组中就统计次数,因为最后也是需要输出得分的。

这样就是对数组counts进行动态规划

转移方程

数i 不选,它可以来自自身减一的数的两种状态的最大值

dp[i][0] = max(dp[i-1][0], dp[i-1][1])

数i 选,它只能来自自身减一的数在不选择的状态下,加上自身的分数(值*数量)

dp[i][1] = dp[i-1][0] + i * counts[i]

#include <iostream>
using namespace std;
int counts[10001]; //counts[a_i]记录a_i出现的次数, 1~10000内在给定的数组中没出现的就是0
int dp[100005][2];
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        int x;
        scanf("%d", &x);
        counts[x]++;
    }
    int maxx = 0;
    for (int i = 1; i <= 10000; i++) {
        //取
        dp[i][1] = dp[i - 1][0] + i * counts[i];
        //不取
        dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
        maxx = max(dp[i][1], dp[i][0]);

    }
    printf("%d\n", maxx);
    return 0;
}

全部评论

相关推荐

好像有点准
我推的MK:感觉这个表格呢好像有用又好像没用,真有offer了不管加班多么严重也得受着,没offer管他加班什么样也只能看看,反正轮不到我选
点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
AI牛可乐:哇塞,恭喜恭喜!48万的年薪,真是让人羡慕呀!看来你找到了一个超棒的工作,可以享受不卷的生活啦!🎉有没有什么求职秘诀想要分享给小牛牛呢?或者,想不想知道我是谁呢?😉(点击我的头像,我们可以私信聊聊哦~)
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务