python硬币多少组合方式_硬币组合的完全搜索算法
这个问题类似于硬币兑换问题,但有点不同。在
问题是这样说的:你有一套硬币,你知道硬币的价值和每种硬币的数量。你想知道你能从这些硬币的非空分组中得到多少不同的总数。在
例如coins = [1, 2, 3]和quantity=[1, 2, 2],有11个可能的和,基本上都是1-11之间的数字。在
阵列硬币的长度最多只能达到20,但是数量[x]可以达到10^5。在
什么是有效的可能的算法解决方案。收集如此大量的所有可能的组合将花费永远的时间。有没有一个数学公式可以确定答案?我看不出它会如何运作,尤其是它需要不同的金额。在
我在考虑根据硬币和它的数量生成一个数组。基本上是多重的:[ [1],
[2, 4],
[3, 6]]
然后必须从每个数组中选择1或无。在
^{pr2}$
我似乎想不出一个好的算法来实现这一点。做嵌套循环可能太慢,因为可能有20个不同的硬币,每个硬币可能有大量。在
另一个可能的解决方案是循环1到最大。其中最大值是所有硬币的总和乘以其相关数量。但问题在于确定是否存在一个子集,它将等于这个数。我知道有一种动态规划算法(subset sum)来确定是否存在一个子集,该子集加起来就是某个值,但是数组是什么呢?在
对于这个例子,它工作得很好,列表为[1,2,4,3,6],目标和为11,那么在DP中计算“True”将得到11。但例如coins = [10,50,100]和{}。答案是9个可能的和,但是如果使用子集和DP algo将得到21个“真”。如果提供的列表是[10,50100100]或[10,50100]基于[[10],[50,100],[100]]
最好使用python解决方案,但不是必需的。在
下面是我当前的代码,在[105100]硬币的例子中得到了21。在def possibleSums(coins, quantity):
def subsetSum(arr,s):
dp = [False] * (s + 1)
dp[0] = True
for num in sorted(arr):
for i in range(1, len(dp)):
if num <= i:
dp[i] = dp[i] or dp[i - num]
return sum(dp)
maximum = sum((map(lambda t: t[0] * t[1], zip(coins, quantity))))
combinations = [[]]*len(coins)
for i,c in enumerate(coins):
combinations[i] = [ j for j in range(c,(c*quantity[i])+1,c) ]
array = []
for item in combinations:
array.extend(item)
print(subsetSum(array,maximum) - 1)
保证约束:1 ≤ coins.length ≤ 20,
1 ≤ coins[i] ≤ 10^4.
quantity.length = coins.length,
1 ≤ quantity[i] ≤ 10^5.
保证(数量[0]+1)*(数量[1]+1)*。。。*(数量[数量.长度-1]+1)<;=10^6。在
python硬币多少组合方式_硬币组合的完全搜索算法相关推荐
- 下列哪种不是python元组的定义方式_下列哪种不是Python元组的定义方式? ( )_学小易找答案...
[多选题]树木的生态习性中气候主要是指 四大因子 [判断题]杜鹃花为典型的酸性土植物 [单选题]以下关于安全目标的考评,不恰当的做法有 [单选题]选择制造电缆的绝缘材料时,希望材料的相对介电系数( ) ...
- 详解python运行三种方式_详解python运行三种方式
方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ p ...
- python扩展库导入方式_使用pip安装Python扩展库的方法
本文节选自作者的<Python编程基础及应用>视频教程.Python编程基础及应用_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com 使用pip进行安装 ...
- python数字排列组合去重_排列组合-生成集合的所有子集
//一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示. //把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中 ...
- python元组的定义方式_序列之元组详解
元组是序列一种,与列表类似,但是不能修改,下面我们详解介绍下元组: 1 列表近亲:元组 1.1 元组定义与访问方式: 元组与列表类似,元组语法:(ele1, ele2, ele3):具体如下: #定义 ...
- 详解python运行三种方式_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- python代数式的表达方式_关于python字典类型最疯狂的表达方式
一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么. # 一个python谜题:这是一个秘密 # 这个表达式计算 ...
- python元组的定义方式_学习Python元组,有哪些必须要掌握的内容
展开全部 学习Python元组2113,有哪些必须要掌握的5261内容? 1.Python元组4102 定义 元组是Python的一种内建数据结构.1653关于元组: 1.元组属于序列,可以存放任意元 ...
- mysql排列组合实现_排列-组合的代码实现
排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下: 首先看递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消耗大量的栈空间,如果线程栈空间不够,那么就运行不下去了, ...
最新文章
- 单词的理解 —— 词义的变化(翻译)
- html设置焦点图片,HTML设置焦点
- IPv6 SLAAC原理详解及配置
- Hdu 1303 Doubles
- 关于税控的一些问题总结
- mysql查询bom清单_按BOM清单展开物料及需求(SQL)
- (20200420已解决)InfluxDB时间显示格式
- 记录六足机器人的各类参数(micropython)
- java飞机大战程序图片不显示
- 从零开始研发GPS接收机连载——10、位同步和帧同步
- Walle 瓦力 安装部署
- 全国大学生FPGA创新设计竞赛:FPGA—相位干涉仪测向算法
- python随机种子seed的作用(强化学习常用到)
- Android中悬浮按钮的实现(记录)
- TABLE 的 COL 及 COLGROUP 元素
- 3D场景上的人体生成器【附有源码】
- Python sys 模块的 sys.argv
- 益企工程云荣获“2021中国软件和信息服务业年度工程建设领域值得信赖产品”
- 电源完整性的PDN测试与仿真
- 分享一个运维监控大屏看板
热门文章
- org.apache.axis2.AxisFault: Timeout waiting for connection
- 燃气管网监测设备:燃气管网压力在线监测
- Implementation Patterns
- WPF(6)WPF之TextBox控件
- 玩客云安装好armbian5.9后后续安装宝塔7.x版本
- 第四章:搭建Windows server AD域和树域
- 路由器能运行linux程序么,用Linux系统做路由器
- 想跨界的安防企业,跨界之前你可看准了
- 相关方管理·三思而后行
- 解决IDEA中java文件左边变成一个黄色的J