zoukankan      html  css  js  c++  java
  • 【数据结构】移除石头得到最大得分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

  • 相关阅读:
    搜索旋转排序数组
    SpringBoot整合mybatis
    《浪潮之巅》阅读笔记01
    阅读杂记01
    go home or stand up
    关于URL编码/javascript/js url 编码(轉)
    水晶报表 相关。
    Format函数(转)
    asp 亂碼問題。
    圣人不死,大盗不止
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/15366397.html
Copyright © 2011-2022 走看看