【题目链接】

ybt 1229:电池的寿命
OpenJudge NOI 4.6 2469:电池的寿命

【题目考点】

1. 贪心

【解题思路】

1. 贪心选择性质的证明

电池分配主要有两步,
第一步:将电池分为两组,使两组电池的总使用时长的差值尽可能小。
第二步:如果总时长更长的分组中有多于1个电池,那么取出这一组中的一些电池运行游戏机,消耗其中一些电池的电量,使得两组电池的使用时长相等。
第三步:两组电池分别装在游戏机的两个电池位置上,运行游戏机。

已知有n个电池,将其电池分为两组,第1组时长加和为aaa,第2组时长加和为bbb。
不失一般性,假设最后第1组使用时长大于等于第二组,即a≥ba\ge ba≥b。其差值d=a−bd = a-bd=a−b。
定义消耗操作:在某一组电池中取出一对电池使用,游戏机运行m2\frac{m}{2}2m​时长,共消耗电池使用时长mmm。

贪心选择:按使用时长从大到小选择电池,将其加入电池使用时长加和更小的分组中。
在所有电池都分配结束后

  1. 如果使用时长更长的第1组中只有1个电池,其它所有电池都在第2组。那么这也就是最优的方案了,此时游戏机可以运行的时长为bbb,即为电池中除了使用时长最长的电池,其余电池使用时长的加和。

  2. 只要第1组中的电池数量大于1,那么一定可以通过1次消耗操作让第1组的电池消耗掉使用时长ddd,进而让两组电池的使用时长加和相同。
    证明:

    在第1组最后一节电池加入时,一定是第1组的使用时长加和a1a_1a1​小于等于第2组的加和b1b_1b1​,即a1≤b1a_1\le b_1a1​≤b1​。而后第1组加入最后一节电池,其时长为aea_eae​,此时第1组电池使用时长a=a1+aea = a_1+a_ea=a1​+ae​,其后第2组加入了0节或多节电池,这些电池的总时长为beb_ebe​,最后第2组电池的使用时长b=b1+beb = b_1 + b_eb=b1​+be​
    那么两组电池使用时长的差值d=a−b=a1+ae−b1−be=ae−(b1−a1)−bed = a - b = a_1+a_e - b_1 - b_e = a_e - (b_1-a_1) - b_ed=a−b=a1​+ae​−b1​−be​=ae​−(b1​−a1​)−be​,由于b1−a1≥0b_1-a_1\ge 0b1​−a1​≥0且be≥0b_e \ge 0be​≥0,所以d≤aed \le a_ed≤ae​。
    由于第1组中不只有1节电池,根据贪心选择,其中已经存在的电池的时长一定大于等于后面加入的电池的时长。所以第1组中除了最后一节电池,一定存在时长为ama_mam​的某电池满足am≥aea_m \ge a_eam​≥ae​,取出这两节电池放入游戏机中运行,运行时长d2\frac{d}{2}2d​,共消耗时长ddd。由于d2≤d≤ae≤am\frac{d}{2} \le d \le a_e \le a_m2d​≤d≤ae​≤am​,所以一定可以做到运行这么久。
    此时第1组电池的剩余总运行时长为a−d=ba - d = ba−d=b,与第2组电池的总运行时长相同。分别取第1组和第2组的电池放在游戏机的两个电池空位上,运行游戏机,还可以运行bbb时长。

    这种方案下,电池电量没有一点浪费,游戏机可以运行的总时长为所有电池可以使用的总时长除以2。

2. 具体做法

将输入的数据存入数组,求其中的最大值及所有数的总和。总和减最大值为剩余数字和。
如果最大值大于等于剩余数字和,那么结果为剩余数字和。否则,输出总和除以2。

【题解代码】

解法1:贪心

#include<bits/stdc++.h>
using namespace std;
#define N 1005
int main()
{double a, ans;int n;while(cin >> n){double mx = 0, sum = 0;for(int i = 1; i <= n; ++i){cin >> a;mx = max(mx, a);sum += a;}if(sum - mx < mx)ans = sum - mx;elseans = sum / 2;cout << fixed << setprecision(1) << ans << endl;}       return 0;
}

信息学奥赛一本通 1229:电池的寿命 | OpenJudge NOI 4.6 2469:电池的寿命相关推荐

  1. 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和

    [题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 2. 求最小公倍数 [解题思路] 求最大公约数,可以用辗转相除法.具体 ...

  2. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

  3. 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和

    [题目链接] ybt 1173:阶乘和 注:一本通上这题,应该把n≤50n\le50n≤50当做n≤100n\le100n≤100来看 OpenJudge NOI 1.6 15:阶乘和 洛谷 P100 ...

  4. 信息学奥赛一本通 1232:Crossing River | OpenJudge NOI 4.6 702:Crossing River

    [题目链接] ybt 1232:Crossing River OpenJudge NOI 4.6 702:Crossing River 一本通里的翻译不够完整,OpenJudge中的英文原题中有对数据 ...

  5. 信息学奥赛一本通 1194:移动路线 | OpenJudge NOI 2.6 2718:移动路线

    [题目链接] ybt 1194:移动路线 OpenJudge NOI 2.6 2718:移动路线 [题目考点] 1. 坐标型动态规划 [解题思路] 解法1:递推 设状态数组dp,dp[i][j]表示从 ...

  6. 信息学奥赛一本通 1193:吃糖果 | OpenJudge NOI 2.6 1944:吃糖果

    [题目链接] OpenJudge NOI 2.6 1944:吃糖果 注:ybt 1193:吃糖果 页面打不开,可以在OpenJudge做该题. [题目考点] 1. 递推/递归 2. 搜索 [解题思路] ...

  7. 信息学奥赛一本通 1191:流感传染 | OpenJudge NOI 2.3 6262:流感传染

    [题目链接] ybt 1191:流感传染 OpenJudge NOI 2.3 6262:流感传染 [题目考点] 1. 二维数组 2. 队列 [解题思路] 用一个字符型二维数组存储各个房间的情况. 1. ...

  8. 信息学奥赛一本通 1185:单词排序 | OpenJudge NOI 1.10 10:单词排序

    [题目链接] ybt 1185:单词排序 OpenJudge NOI 1.10 10:单词排序 [题目考点] 1. 排序 [君义精讲]排序算法 2. 字符串比较 字符数组比较: char s1[N], ...

  9. 信息学奥赛一本通 1182:合影效果 | OpenJudge NOI 1.10 07:合影效果

    [题目链接] ybt 1182:合影效果 OpenJudge NOI 1.10 07:合影效果 [题目考点] 1. 排序 [君义精讲]排序算法 [解题思路] 解法1:将男生身高和女生身高分别排序 将男 ...

最新文章

  1. 用createrepo配置Yum本地源
  2. 公司--页面调用日期控件 WdatePicker日历控件使用方法
  3. 初看jQuery,比较dojo与jQuery的不同点
  4. 改变层级_3DMAX基础,可编辑多边形层级介绍及概念
  5. python sys.argv[]用法
  6. 精华阅读第6期|程序猿的世界,你不懂!
  7. SSM环境+jquery+ajax 实现批量文件上传并预览后,同时上传文件和数据 校验图片后缀是否合法 文件大小是否超限
  8. 【工具】国密SM4算法加解密
  9. Java线程之线程的五种状态
  10. html5 qq看点,AlloyTouch实战--60行代码搞定QQ看点资料卡
  11. 初学者C语言练习题-指针
  12. VC++中COM开发理论知识
  13. win10搜索计算机中所有excel,win10系统无法搜索到word、excel等文件内容的处理技巧...
  14. wnmp(wordpress环境程序windows+Nginx+PHP7.2)
  15. 弘辽科技:直通车双重优化
  16. 高数教材班复习Hint(1.1-1.7)
  17. Windows常见DOS命令
  18. Wi-Fi (-6) 知识点整理
  19. html的样式下拉框的联动,Web框架Ajax实现html下拉框联动
  20. 专业音视频播放器:Elmedia Video Player Pro mac中文版

热门文章

  1. uestc 851 方老师与素数
  2. [zz]母牛生牛问题解析
  3. Oracle 不同故障的恢复方案
  4. 1947-2021 NBA总冠军次数排行榜
  5. CC2530通用I/O
  6. python学生名片系统_python学生管理名片
  7. 面试被问线程池,真香
  8. 最新SparkSQL 学习路径. pdf(廖雪峰团队研发)
  9. jeecgboot logback-spring.xml配置不生成新日志文件
  10. Windows mysql-64位 数据库安装