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

删除相邻数字的最大分数

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;
}

全部评论

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
秋招投简历提醒助手:个人经验是,一般面二十场左右就会进入侃侃而谈阶段。我今年七月末的时候开始的第一次面试,都是很多不会,回复很慢。后面慢慢迭代,到九月中的时候基本上面啥说啥,很放松的状态
远程面试的尴尬瞬间
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务