【发布时间】:2022-01-23 12:13:02
【问题描述】:
假设我想达到某个总分S,并且有一些单独的“罐子”,我可以从中获得某些个人分数,存储为正整数列表。我想知道在最多n_i 尝试从锅i 之后是否有可能获得所需的分数。分数累积。
例如
- 我正在尝试准确获得
S=10积分 - 锅1是
[1,2],锅2是[4,5,6] - 如果
n_1=0、n_2=1那就不可能了 - 如果
n_1=1、n_2=1那就不可能了 - 如果
n_1=0,n_2=2则有可能 (6+4) - 如果
n_1=2,n_2=1则有可能 (6+2+2)
我正在尝试用 python 编写代码来解决这个问题。
我想我会首先找到所有获得分数的组合S,其长度小于或等于n_is 的总和;例如对于S=10, n_1=1, n_2=1,我会找到[(10), (9,1), (8,2), (7,3), (6,4), (5,5)](我目前不确定是否还需要(4,6) 等),然后遍历它们。那么,问题 1:我怎样才能轻松获得这些数据? 或许来自itertools 的东西?
然后,如果对每个罐子的尝试次数没有限制,我会简单地检查组合的每个元素是否在任何罐子中;如果是,那么有可能打破循环,如果不是,则继续下一个组合;如果你尝试了每一种组合,但都没有奏效,那是不可能的。
复杂性来自于限制每个底池的尝试次数; 问题 2:我该如何修改上述方法来解决这个问题?
最后,问题 3:我可以采取不同的方法来解决这个问题吗?
【问题讨论】:
标签: python python-3.x combinatorics