• 电池的寿命(贪心)


    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,算了运气不好学到了
  • 相关阅读:
    dubbo+zookeeper注册服务报错问题:No service registed on zookeeper
    悲观锁和乐观锁的区别,它们是怎么实现
    cookie和session的区别,分布式环境怎么保存用户状态
    深入理解Java接口和抽象类
    Java中堆内存和栈内存详解
    Java基础梳理(一)
    Spring的@Transactional注解详细用法
    SpringBoot学习笔记(一)基础
    项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok
    有依赖的背包问题-购物单
  • 原文地址:https://www.cnblogs.com/zzyh/p/6648359.html
Copyright © 2020-2023  润新知