系统会给定一串数字让玩家选择,如果玩家选中一个数字,比如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; } }