198

问答题 198 /393

系统会给定一串数字让玩家选择,如果玩家选中一个数字,比如M,那么玩家获得M分,但同时当前选中的M,以及这串数字中所有的M+1和M-1将会全部消失。玩家可以继续选择得分,直到串为空。最终系统会根据玩家获得的积分发送奖励,积分越高,奖励越丰厚。例如系统给定的数字是[2,3,3,3,4], 如果玩家选定了2,玩家得2分,并且选中的2和所有的1和3会消失,那么数组只剩下[4],玩家再选择4,数组为空,此时一共获得6分如果玩家首先选中的是3,那么玩家得3分,选中的3,以及2和4都会消失,数字剩下[3,3],第二次和第三次玩家可以再次选择3,这样选择一共得9分,这也是最优的选择方式。

参考答案

参考回答:

public class Select {
public static void main(String[] args) {
int[] a = {2,3,3,3,4};
int max = 0;
for(int i=0;i<a.length;i++) {
if(max<a[i])max=a[i];
}
int[] num = new int[max+1];
for(int i=0;i<a.length;i++) {
num[a[i]]++;
}
System.out.println(maxSum(1,max,num));
}
public static int maxSum(int start, int end, int[] num){
int[] sum = new int[end+1];
sum[1] = num[1]*1;
sum[2] = Max(num[1]*1,num[2]*2);
sum[3] = Max((num[1]*1+num[3]*3),num[2]*2);
for(int i=4;i<end+1;i++) {
sum[i] = Max(num[i]*i+sum[i-2],num[i-1]*(i-1)+sum[i-3]);
}
return sum[end];
}
public static int Max(int m, int n){
if(m>n)return m;
else return n;
}
}