对于贪心问题,不要太关注过程或者方法,而应该关注结果的数据。
一般来讲,贪心问题至少要讨论两种情况。
这道题点关注点就不在什么时候换电池,如何换电池,而在于电池到低能用多久。
讨论可分为两种情况:
1.最大的电池寿命大于其他电池寿命之和
时间=其他电池寿命之和
2.最大的电池寿命小于等于其他电池寿命之和
时间=总和/2
想明白就很简单啦!
//电池的寿命 OpenJ_Bailian - 3468
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
#include <cstring>
using namespace std;
const int maxn = 1010;
int n, t[maxn];
int main()
{
while(scanf("%d",&n) != EOF){
memset(t, 0, sizeof(t));
double sum = 0;
for(int i = 1; i <= n; i++){
scanf("%d",&t[i]);
sum += t[i]; //节省时间
}
//分为两种情况讨论
sort(t+1,t+n+1);
sum -= t[n];
if(t[n] > sum) //当最大的电池寿命大于其他寿命之和
printf("%.1lf\n",sum);
else //当最大的电池寿命小于等于其他寿命之和
printf("%.1lf\n",(double)(sum+t[n])/2);
}
return 0;
}