1.简述:
描述
给定一个长度为 n 的仅包含正整数的数组,另外有一些操作,每次操作你可以选择数组中的任意一个元素 ,同时数组中所有等于 和 的元素会被全部移除,同时你可以得到 分,直到所有的元素都被选择或者删除。请你计算最多能得到多少分。数据范围: 数组长度满足 ,数组中的元素大小都满足
输入描述:
第一行输入一个正整数 n 表示数组的长度
第二行输入 n 个数字表示数组的各个元素值。
输出描述:
输出能得到的最大分数。
示例1
输入:
输出:
说明:
示例2
输入:
输出:
说明:
先选择 3 ,同时 2 被移除,再选择 1 ,即得到 4 分。
示例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]);
}
}
本文来自网络,不代表技术学习分享_CKX技术立场,转载请注明出处。