这个问题类似于硬币兑换问题,但有点不同。在

问题是这样说的:你有一套硬币,你知道硬币的价值和每种硬币的数量。你想知道你能从这些硬币的非空分组中得到多少不同的总数。在

例如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)&lt;=10^6。在

python硬币多少组合方式_硬币组合的完全搜索算法相关推荐

  1. 下列哪种不是python元组的定义方式_下列哪种不是Python元组的定义方式? ( )_学小易找答案...

    [多选题]树木的生态习性中气候主要是指 四大因子 [判断题]杜鹃花为典型的酸性土植物 [单选题]以下关于安全目标的考评,不恰当的做法有 [单选题]选择制造电缆的绝缘材料时,希望材料的相对介电系数( ) ...

  2. 详解python运行三种方式_详解python运行三种方式

    方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ p ...

  3. python扩展库导入方式_使用pip安装Python扩展库的方法

    本文节选自作者的<Python编程基础及应用>视频教程.Python编程基础及应用_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 使用pip进行安装 ...

  4. python数字排列组合去重_排列组合-生成集合的所有子集

    //一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示. //把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中 ...

  5. python元组的定义方式_序列之元组详解

    元组是序列一种,与列表类似,但是不能修改,下面我们详解介绍下元组: 1 列表近亲:元组 1.1 元组定义与访问方式: 元组与列表类似,元组语法:(ele1, ele2, ele3):具体如下: #定义 ...

  6. 详解python运行三种方式_详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  7. python代数式的表达方式_关于python字典类型最疯狂的表达方式

    一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么. # 一个python谜题:这是一个秘密 # 这个表达式计算 ...

  8. python元组的定义方式_学习Python元组,有哪些必须要掌握的内容

    展开全部 学习Python元组2113,有哪些必须要掌握的5261内容? 1.Python元组4102 定义 元组是Python的一种内建数据结构.1653关于元组: 1.元组属于序列,可以存放任意元 ...

  9. mysql排列组合实现_排列-组合的代码实现

    排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下: 首先看递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消耗大量的栈空间,如果线程栈空间不够,那么就运行不下去了, ...

最新文章

  1. 单词的理解 —— 词义的变化(翻译)
  2. html设置焦点图片,HTML设置焦点
  3. IPv6 SLAAC原理详解及配置
  4. Hdu 1303 Doubles
  5. 关于税控的一些问题总结
  6. mysql查询bom清单_按BOM清单展开物料及需求(SQL)
  7. (20200420已解决)InfluxDB时间显示格式
  8. 记录六足机器人的各类参数(micropython)
  9. java飞机大战程序图片不显示
  10. 从零开始研发GPS接收机连载——10、位同步和帧同步
  11. Walle 瓦力 安装部署
  12. 全国大学生FPGA创新设计竞赛:FPGA—相位干涉仪测向算法
  13. python随机种子seed的作用(强化学习常用到)
  14. Android中悬浮按钮的实现(记录)
  15. TABLE 的 COL 及 COLGROUP 元素
  16. 3D场景上的人体生成器【附有源码】
  17. Python sys 模块的 sys.argv
  18. 益企工程云荣获“2021中国软件和信息服务业年度工程建设领域值得信赖产品”
  19. 电源完整性的PDN测试与仿真
  20. 分享一个运维监控大屏看板

热门文章

  1. org.apache.axis2.AxisFault: Timeout waiting for connection
  2. 燃气管网监测设备:燃气管网压力在线监测
  3. Implementation Patterns
  4. WPF(6)WPF之TextBox控件
  5. 玩客云安装好armbian5.9后后续安装宝塔7.x版本
  6. 第四章:搭建Windows server AD域和树域
  7. 路由器能运行linux程序么,用Linux系统做路由器
  8. 想跨界的安防企业,跨界之前你可看准了
  9. 相关方管理·三思而后行
  10. 解决IDEA中java文件左边变成一个黄色的J