Advertisement

(java)Poj3468:电池的寿命

阅读量:

3468:电池的寿命

总时间限制: 1000ms 内存限制: 65536kB

描述
小S最近新购了一款掌上娱乐设备,该设备主要依赖两节5号电池供电。为了确保长时间的游戏体验,小S特意购置了多组5号电池,这些电池虽然均由相同的电压供电,但由不同生产商制造的质量存在差异,从而导致使用寿命也有所分化,其中一些能够持续运行5小时,而另一些则可能只能维持3小时左右。由此可见,如果仅有两个不同类型的电池(一个能运行5小时、一个只能运行3小时),那么小S的游戏时长也只能维持3个小时,因为电量不足的一个电池无法继续提供额外的游戏时间;但如果拥有多个不同类型的电池组合,便能更加充分地发挥它们的能量。例如他拥有的三组不同品牌生产的电池分别能持续运行3小时、3小时以及5小时,他可以通过以下步骤进行操作:首先投入两个续航时间仅为3小时的 battery 进行游戏;经过半个小时后切换其中一个 battery 到续航时间为 5 小时的品牌;再经过 2.5 小时后将最后一个仅剩 2.5 小时电量的 battery 替换上来继续游戏;最终总计可享受长达 4.75 小时的游戏时光(即 2.7 小时 + 1.97 小时 + 0.88 小时);这种灵活更换策略最大限度地提升了设备的整体续航能力。

当前已知电池数量及其续航时间,请制定一个方案以最大化续航时间。

输入由若干组数据组成。每组数据由两行组成:第一行为一个整数N (2 ≤ N ≤ 1000),表示电池数量;第二行为包含N个正整数值的列表,表示各电池可使用的时长。

输出
对每组数据输出一行,表示电池能使用的时间,保留到小数点后1位。

样例输入

复制代码
    2
    3 5
    3
    3 3 5

样例输出

复制代码
0
    5.5

在解决这个问题时,我们主要采用以下思路:首先通过对问题进行分析得出两种不同的情况进行讨论。第一种情况是当电池的最大使用寿命超过剩余总使用时间时,则结果等于剩余所有电池的使用寿命总和;第二种情况则是当最大使用寿命小于剩余使用时间时,则结果等于所有电池寿命之和的一半。需要注意的是,在计算最终结果时,请确保输出保留一位小数。(这个数学分析过程虽然复杂但相当严谨)

参考程序

复制代码
    import java.util.Scanner;
    
    public class Main {
    	
    	public static int N,a,max,sum ;
    	public static void main(String[] args) {
    		Scanner sc =new Scanner(System.in);
    		
    		while(sc.hasNext()){
    			N = sc.nextInt();
    			max=0;
    			sum=0;
    			
    			for(int i=0;i<N;i++){
    				a = sc.nextInt();
    				max= Math.max(max,a);
    				sum +=a;
    			}
    			if(max>sum-max){
    				System.out.println((double)(sum-max)) ;
    			}else{
    				System.out.println(sum/2.0) ;
    			}
    			
    		}
    	}
    
    }

新手上路,请大佬☞教
附上原题链接http://bailian.openjudge.cn/practice/3468

全部评论 (0)

还没有任何评论哟~