题目描述:小明和小红是好朋友,但最近遇到一个棘手的问题,有一盒糖果要分成两份但是每颗糖果质量都不尽相同,但为了分配的公平每份糖的糖果数量相差不得超过1,在此条件下两份糖果的质量差距尽可能小。

输入:一行数,包含一个数n,代表糖果数量,后面一次是n个整数一次表示每个糖果的质量,每个糖果的质量都是1到450之间的一个整数,每盒最多有20个糖果。

输出:每个样例输出两个数字分别为两堆糖果的质量,如不相同,先小后大。

样例

输入:5 9 6 5 8 7

输出:17 18

一开始做这道题的时候,我纠结于“找到一个策略,按照这个策略分糖果就能得到结果”。但后来我发现,其实根本不需要找出这么个策略,只需用暴力搜索算法即可。关键点是:“每份糖的糖果数量相差不得超过1”,假设糖果数目是n,则分成的两堆糖果的数量一定是n/2和n-n/2。这就归结为一个组合问题:“如何在n个糖果中选n/2个糖果,使得选出的糖果堆和剩下的糖果堆质量之差最小?”

因此,只要搜索所有C(n,n/2)种分糖方法,就能找出差值最小的那种。

这里重点解释下search函数:

第一个参数sugers,表示所有糖的质量。

第二个参数weight,表示当搜索到这一步时,已经选取出来的糖果的质量总和。

第三个参数start,表示“决定要不要选”的那颗糖果在sugers中的编号。

第四个参数count,我手里这堆糖果中糖果的数量。如果count到达了n/2,表明搜索到一种分法,可以进行比较了。

第五个参数re

科大讯飞2018暑期实习招聘在线编程题:如何分糖果?相关推荐

  1. 2018腾讯实习招聘笔试编程题之翻转数列

    题目描述:小Q定义了一种数列称为翻转数列                  给定整数n和m,满足n能被2m整除.对于一串连续递增整数数列1,2,3,4...,每隔m个符号翻转一次,最初符号为'-'   ...

  2. 2018腾讯实习招聘笔试编程题之安排机器

    题目描述:小Q的公司最近接到m个任务,第i个任务需要Xi的时间去完成,难度等级为yi.                 小Q拥有n台机器,每台机器最长工作时间zi,机器等级wi.           ...

  3. 牛客网 vivo2020届春季校园招聘在线编程考试 第3题

    牛客网 vivo2020届春季校园招聘在线编程考试 第3题 1.问题分析 2.问题解决 3.总结 1.问题分析   主要就是两个数学公式.代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考 ...

  4. 牛客网 vivo2020届春季校园招聘在线编程考试 第2题

    牛客网 vivo2020届春季校园招聘在线编程考试 第2题 1.问题分析 2.问题解决 3.总结 1.问题分析 基本思路是: 1.如果有因子大于等于 10 ,说明不存在 m,使得 m 的各位(个位.十 ...

  5. vivo2020届春季校园招聘在线编程考试--[编程题]vivo智能手机产能

    vivo2020届春季校园招聘在线编程考试--[编程题]vivo智能手机产能 题目 解题思路 代码块 题目 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升. 假 ...

  6. vivo2020届春季校园招聘在线编程考试--[编程题]数位之积

    vivo2020届春季校园招聘在线编程考试--[编程题]数位之积 题目 解题思路 代码块 题目 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 现给定任意正 ...

  7. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现

    看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...

  8. 阿里算法工程师在线编程题

    第一次投实习,阿里的在线编程题,只有一道,半个小时完成. 这道题主要要想到有递推公式 当N>=3时A(N)=M*(M-1)^(N-1)-A(N-1) N=2时,初值为M(M-1),因为只有两块, ...

  9. 阿里笔试题(2017在线编程题)-- 数串分组 --Java实现

    看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...

最新文章

  1. python连接数据库,处理数据结果后生成excel文件
  2. 如何去除使用inline-block之后的间距(二)?
  3. 安装linux_linux安装mysql
  4. 强化学习-Vanilla Policy Gradient(VPG)
  5. easyUI下datagrid嵌套显示
  6. linux time
  7. JavaScript-callapply方法
  8. 自己创建DXperience的本地资源文件
  9. MATLAB_R2020b安装
  10. win10服务器账号和密码,WIN10提示输入管理员用户和密码
  11. html文字和图片垂直居中,css如何让图片和文字垂直居中?
  12. 域名申请/ssl证书申请
  13. 三顿半、永璞、时萃,谁能成为下一个咖啡品类之王?
  14. 监督学习、无监督学习、强化学习的区别
  15. root高级权限怎么弄,怎样拥有root权限
  16. 菜学C++ Day55 OJ题目1151桐桐数
  17. 麦普奇医疗获得千万元A轮融资,投资方为达晨财智...
  18. 《IT项目经理成长手记》读后感
  19. 自动驾驶的分级和无人驾驶系统简介
  20. 无线WIFI系统如何解决短信认证功能?

热门文章

  1. 5分钟学会Java写一个接口
  2. Python实现人脸识别功能,face_recognition的使用 | 机器学习
  3. js拖拽onmousedown onmouseup onmousemove案例
  4. 连续8年参展安博会,UIT创新科发力安防市场
  5. 31-Linux(开发环境,转载)
  6. Java语句后面可以有多个分号
  7. 百度python小白逆袭大神系列课程day5——爱奇艺《青你2》评论爬取并分析
  8. 基于python,控制微信自动登录并发送消息给指定联系人
  9. 游戏内嵌社区服务开放,助力开发者提升玩家互动与留存
  10. 软件生命周期模型知识点总结(瀑布模型、演化模型、增量模型、V模型、W模型、螺旋模型、构件组装模型、RAD模型、RUP模型、极限编程模型)