假设我们有一个长度为z的数组。由x个不同的偶数和y个不同的奇数组成。
所以z = x + y。
我们也知道x => 1总是适用。
第一个问题:长度为z的数组有多少个。那应该是z!很多还是?
第二个问题:有多少个不同的数组,以便数组中的最后一个偶数在奇数索引上。 (此示例中的数组以索引1开头)
示例:
1)[1,2,3,4,5]该数组的长度为5。数组中的最后一个偶数为4,数组中的索引为4,因此我们不计算这样的数组。 / p>
2)[52,3,14]。该数组中的最后一个偶数是14,索引为3。因此,这样的数组会计入它。
3)[52,3,5,7]。该数组中的最后一个偶数是52,索引为1。因此,这样的数组会对其计数。
我只是找不到解决此问题的好方法。特别是,我对动态编程的解决方案感兴趣。
答案 0 :(得分:0)
第一个问题: 有z!数组,除非数组中有重复的数字。公式如下: n!/(((n1!)(n2!)(n3!) ... (nz!)),其中n1是第一个数字的倍数数组重复,n2第二个数字重复的次数..等等。
答案 1 :(得分:0)
要回答第二个问题,我们只需查看偶数/奇数序列的排列:
eee…eeeooo…ooo
`--,--´`--,--´
x y
最后一个e
处于奇数位置的数量将仅需乘以偶数(x!
)之间的排列数量和奇数。
现在让我们枚举e
/ o
排列:
???????eooo…ooo
`--,--´ `--,--´
i-1 z-i
对于某些i
作为最后一个偶数的索引,有许多数字以i-1
个数字开头,由x-1
偶数和y - (z-i)
= i-x
个奇数。您应该能够i
循环执行一次,检查x-1 >= 0 && i-x >= 0 && i-x <= y
(是否完全有效)以及i
是否为奇数,然后对它们中的每一个求和
(i-1)! / (x-1)! / (i-x)!