3

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

 1 year ago
source link: https://blog.51cto.com/u_15488507/5824134
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

精选 原创

97的风 2022-11-04 17:27:46 博主文章分类:面试题 ©著作权

文章标签 数组 i++ 数据 文章分类 Java 编程语言 阅读数207

1.简述:

描述

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

输入描述:

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

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

输出描述:

输出能得到的最大分数。

示例1
直接选择元素 2 ,然后 1 被同时移除。
示例2
先选择 3 ,同时 2 被移除,再选择 1 ,即得到 4 分。
示例3
9
1 2 1 3 2 2 2 2 3
第一步选择一个 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]);
}
}
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK