移除石头得到最大得分Maximum Score From Removing Stones

移除石头得到最大得分Maximum Score From Removing Stones

有3堆石子,大小分别为a,b,c

规则是每次只能从非空的2堆中各选一个,然后加1分。直到出现两个或者更多的空堆时,停止。

从给定的a,b,c,计算能得到的最大分数。

思路

3堆大小分别为min,mid,max, 为了得到最大的分数,需要一个方法,尽可能的利用最小的一堆,将较多的2堆消耗为一样的数量。这样最后min可能消耗完毕或者只留一个,mid必然被消耗完毕。

第一步
尝试将max减到和mid一样多,利用min中的数量来消耗max,结果可能是

  1. max减到和mid一样多,并且min消耗完了。
  2. max 减到和mid一样多,但是min还有剩,
  3. max无法减到和mid一样多,因为min不够,此时min=0。

第二步,在上一步的基础上,其实只有2个方向,1,3和2。从1,3来考虑min消耗完了,那么只能从max,mid里面得分,觉得最后得分的是最小的一堆。从2 来考虑,min还有剩,那么接下来要做的,就是用mid和max分别减掉min的一半,但是min可能是奇数,所以要提前偶化处理,此时消耗完min,得分min,然后就是继续从mid和max得分

public int maximumScore(int a, int b, int c){
    
    
	int min = Math.min(a,Math.min(b,c));
	int max =Math.max(a,Math.max(b,c));
	int mid =a+b+c-min-max;
	int n=0;
	
	//step1
	int tmp = Math.min(max-mid,min);
	max -= tmp;
	min -= tmp;
	n+=tmp;
	
	//step2
	if(min>0){
    
    
		if(min%2==1){
    
    
			min-=1;
		}
		max-=min/2;
		mid-=min/2;
		n+= min;
	}
	
	//step3
	n+=mid;
	return n;
}

Tag

math

猜你喜欢

转载自blog.csdn.net/edisonzhi/article/details/120603890