#yyds干货盘点# 动态规划专题:删除相邻数字的最大分数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 动态规划专题:删除相邻数字的最大分数相关的知识,希望对你有一定的参考价值。

1.简述:

描述

给定一个长度为 n 的仅包含正整数的数组,另外有一些操作,每次操作你可以选择数组中的任意一个元素 #yyds干货盘点# ,同时数组中所有等于 #yyds干货盘点# 和 #yyds干货盘点# 的元素会被全部移除,同时你可以得到 #yyds干货盘点# 分,直到所有的元素都被选择或者删除。请你计算最多能得到多少分。数据范围: 数组长度满足 #yyds干货盘点# ,数组中的元素大小都满足 #yyds干货盘点#

输入描述:

第一行输入一个正整数 n 表示数组的长度

第二行输入 n 个数字表示数组的各个元素值。

输出描述:

输出能得到的最大分数。

示例1

输入:

2
1 2

输出:

2

说明:

直接选择元素 2 ,然后 1 被同时移除。
示例2

输入:

3
1 2 3

输出:

4

说明:

先选择 3 ,同时 2 被移除,再选择 1 ,即得到 4 分。
示例3

输入:

9
1 2 1 3 2 2 2 2 3

输出:

10

说明:

第一步选择一个 2 ,然后所有 1 和 3 都被移除了,此时数组中剩下的是 [2,2,2,2] ,依次选择他们即可得到 10 分

2.代码实现:

import java.util.Scanner;

public class Main
public static void main(String[] args)
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
int[] p = new int[n];
for (int i = 0; i < n; i++)
p[i] = reader.nextInt();

int[] dp = new int[10001];
int[] trans = new int[10001];
for (int i = 0; i < p.length; i++)
trans[p[i]] += p[i];

dp[0] = 0;
dp[1] = trans[1];
for (int i = 2; i < trans.length; i++)
dp[i] = Math.max(dp[i - 1], dp[i - 2] + trans[i]);

System.out.println(dp[dp.length - 1]);


以上是关于#yyds干货盘点# 动态规划专题:删除相邻数字的最大分数的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 动态规划专题:数位染色

#yyds干货盘点# 动态规划专题:最长回文子序列

#yyds干货盘点# 动态规划专题:计算字符串的编辑距离

#yyds干货盘点# 动态规划专题:信封嵌套

#yyds干货盘点# 动态规划专题:装箱问题

#yyds干货盘点# 动态规划专题:小红取数