我正在寻找一种更快的方法来解决这个问题:
假设我们有n boxes and n 弹珠(他们每个人都有不同的种类)。每个盒子只能包含某种弹珠(如下例所示),并且只有一个大理石适合装在一个盒子里. 请阅读编辑内容。整个算法已在下面链接的帖子中进行了描述,但没有精确描述,所以我要求重新解释。
问题是:我可以通过多少种方式在多项式时间内将弹珠放入盒子中?
Example:
n=3
Marbles: 2,5,3
Restrictions of the i-th box (i-th box can only contain those marbles): {5,2},{3,5,2},{3,2}
The answer: 3, because the possible positions of the marbles are: {5,2,3},{5,3,2},{2,5,3}
我有一个在 O(2^n) 中工作的解决方案,但它太慢了。关于盒子容差还有一个限制,我认为这不是很重要,但我也会写它们。每个盒子都有自己的种类限制,但有一个所有盒子都接受的种类列表(在上面的示例中,广泛接受的种类是 2)。
Edit:我刚刚发现这个问题,但我不确定它是否适合我的情况,并且动态解决方案没有得到很好的描述。有人可以澄清这一点吗?这个问题4年前就已经回答了,所以我不会在那里问。https://math.stackexchange.com/questions/2145985/how-to-compute-number-of-combinations-with-placement-restrictions?rq=1 https://math.stackexchange.com/questions/2145985/how-to-compute-number-of-combinations-with-placement-restrictions?rq=1
Edit#2:我还必须提到,除了广泛接受的列表之外,一个盒子的接受列表的最大大小有 0、1 或 2 个元素。
Edit#3:这个问题参考了我之前的问题(允许的数字 1 到 N 的排列 https://stackoverflow.com/questions/69740876/allowed-permutations-of-numbers-1-to-n),我发现这太笼统了。我附上此链接是因为还有一个更重要的信息 - 可以放置弹珠的盒子之间的距离不大于 2。