Python每日一练第5天——将一组数尽可能均匀地分成两堆,使两个堆中的数的和尽可能相等
每日一练-做题
麦克叔叔去世了,他在遗嘱中给他的两个孙子阿贝和鲍勃留下了一堆珍贵的口袋妖怪卡片。遗嘱中唯一的方向是“尽可能均匀地分配纸牌的价值”。作为Mike遗嘱的执行人,你已经为每一张口袋妖怪卡片定价,以获得准确的货币价值。你要决定如何将口袋妖怪卡片分成两堆,以尽量减少每一堆卡片的价值总和的差异。
例如,你有下列n=8 个口袋妖怪卡片:
经过大量的工作,你发现你可以用下面的方法来划分卡片:
这给了安倍10美元的牌给了鲍勃11美元的牌。这是最好的除法吗?
你要做的是解决n张牌的问题其中每张牌ci都有一个正整数值vi.你的解决方法是计算牌应该如何被分割以及每摞牌的价值。
输入输出示例如下:
1.通过检查所有可能的桩以蛮力解决此问题。 对这种蛮力算法的时间复杂度进行分析,并通过实施和实验验证您的分析结果(既写出来算法的设计思路等),并用python算法实现编程
2.通过动态编程开发更有效的算法。 您应该首先通过动态编程的思想来分析此问题,并编写相应的递归属性。 对这种算法的时间复杂度进行分析,并通过实施和实验验证您的分析结果。并用python代码实现动态编程
代码
def deal(data, flag):a = []for i in data:if i >= flag:return [i]elif a == []:a.append([i])else:a = a+[k+[i] for k in a if sum(k)+i <= flag]a.append([i])target = sum(max(a, key=sum))return list(filter(lambda x: sum(x) == target, a))if __name__ == '__main__':c = [2, 1, 3, 1, 5, 2, 3, 4]flag = sum(c)//2res = deal(c, flag)print(res)
运行结果
[[2, 3, 5], [1, 3, 1, 5], [2, 1, 5, 2], [3, 5, 2], [2, 1, 5, 2], [2, 1, 3, 1, 3], [2, 5, 3], [1, 1, 5, 3], [2, 3, 2, 3], [1, 3, 1, 2, 3], [5, 2, 3], [2, 1, 3, 4], [2, 3, 1, 4], [1, 5, 4], [1, 5, 4], [1, 3, 2, 4], [2, 1, 1, 2, 4], [3, 1, 2, 4], [2, 1, 3, 4], [3, 3, 4], [2, 1, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
Python每日一练第5天——将一组数尽可能均匀地分成两堆,使两个堆中的数的和尽可能相等相关推荐
- Python每日一练0023
问题 如何判断一个文件是否存在 解决方案 这个问题可以分成几类问题 如果这里的文件指的是文件或目录,我们可以用os.path.exists()方法 >>> import os > ...
- Python每日一练0004
问题 如何保存迭代对象的最后N个元素 例如保存列表['a', 'b', 'c', 'd']的最后2个元素 或者保存某个迭代器对象的最后5个元素 解决方案 对于列表.元组这样的数据结构,可以使用切片来很 ...
- python 编程一日一练-python每日一练
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 过滤掉列表中的负数 筛选出字典{lilei: 79,jim: 88,lu ...
- python 编程一日一练-Python每日一练0022
问题 你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如: l = [5, 2, 4, 1, 2, 4, 5, 6, 8] with op ...
- python 编程一日一练-Python每日一练0013
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用collections库的ChainMap类,可以快速的将多个d ...
- Python每日一练0018
问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. Python的float类型是存在误差的 >>> a = 1.1 >>> b = 2.2 & ...
- python每日一练名片管理程序_Python每日一练0022
问题 你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如: l = [5, 2, 4, 1, 2, 4, 5, 6, 8] with op ...
- 【每日一练】68—CSS实现一组渐变按钮动画效果
在之前,我们也练习过一些按钮动画的效果,今天我们再来练习一组CSS实现的按钮动画效果,下面是今天练习的最终效果: 接下来,我们再来看一下这个案例的源码. HTML代码: <!doctype ht ...
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,repath = 'test' files = os.listdir(path)def count_word(words):dic = {}max = ...
最新文章
- IDEA工具基本设置
- Anaconda——安装与添加 Anaconda Python 免费仓库
- TensorBoard不是内部或外部指令也不是可运行的程序(已解决)
- QuickSort 快速排序
- 2021高考技能考试成绩查询,2021年临床技能考试成绩出来了!附查询方式
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层(转)...
- 1.图像显示图像腐蚀图像模糊canny边缘检测视频操作调用摄像头
- 【学习笔记】简单的连通性状压DP——插头DP(不学以为是天书)
- 数字滤波器及GUI界面的设计(MATLAB)
- CISCO技术(1.7万)
- java设置excel表头_设置Java导出Excel表头
- SQL Server with ties 语句
- C++ 编写一个解释器
- 微信域名防封跳转系统的原理,微信域名防封的注意点
- 截图神器推荐 ShareX
- 质量保证和质量控制(QA / QC),你们知道区别在哪里吗?
- 挖掘肖特基二极管的作用及其接法
- 神经网络学习(三):解偏微分方程
- 高性能MySQL之 Chapter13
- 自动控制原理(4) - 时域分析