(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
