电池的寿命(贪心)

2469:电池的寿命

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

小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电。为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同,有的能使用5个小时,有的可能就只能使用3个小时。显然如果他只有两个电池一个能用5小时一个能用3小时,那么他只能玩3个小时的游戏,有一个电池剩下的电量无法使用,但是如果他有更多的电池,就可以更加充分地利用它们,比如他有三个电池分别能用3、3、5小时,他可以先使用两节能用3个小时的电池,使用半个小时后再把其中一个换成能使用5个小时的电池,两个半小时后再把剩下的一节电池换成刚才换下的电池(那个电池还能用2.5个小时),这样总共就可以使用5.5个小时,没有一点浪费。

现在已知电池的数量和电池能够使用的时间,请你找一种方案使得使用时间尽可能的长。

输入

输入包含多组数据。每组数据包括两行,第一行是一个整数N (2 ≤ N ≤ 1000),表示电池的数目,接下来一行是N个正整数表示电池能使用的时间。

输出

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

样例输入
2
3 5
3
3 3 5
样例输出
           3.0
5.5
【思路】:orz这就是要我吐血的题。。。调了好久。。。。因为我开了个数组。。。我什么错明天再说
我先贴代码ORZ
等等 思路。。。
贪心问题 不要在意过程,要在意结果。。。因为是贪心嘛,所以不要想什么时候换电池,要想怎么玩的时间长
而 贪心问题一般知道关心两种情况)——总结至网友
(1)最大时间的电池,大于其他所有电池时间之和;那样你就一直用其他电池耗这块时间长的巨无霸电池,所以时间就是除去最大时间电池
的其他时间之和
(2)最大时间的电池,小于其他所有电池之和,那样所有的电池一定能耗完且没有浪费,且时间为总时间的一半。(小生不才,解释不了为什么,试了试似乎是这个样子的哦orz)
-------------------贴代码啦---------------------------
【代码酱】
 1 #include<iostream>
 2 #include<cstdio>
 3 int main()
 4 {
 5 int n,sum,max,x;
 6 while (scanf("%d",&n)!=EOF)
 7 {
 8 sum=0;max=0;
 9 for (int i=1;i<=n;i++)
10 {
11 scanf("%d",&x);
12 sum+=x;
13 max=max>x?max:x;
14 }
15 if(max>=sum-max)printf("%.1lf
",(double)sum-max);
16 else
17 printf("%.1lf
",sum/2.0);
18 }
19 }

//懒得注释了orz

要吐血了
【】我终于知道我之前一直调但是错的原因了,是因为我定义了一个time数组,和stl里的函数名重了;
qnbbd,算了运气不好学到了
原文地址:https://www.cnblogs.com/zzyh/p/6648359.html