【发布时间】:2019-09-09 14:37:07
【问题描述】:
我有一个整数序列[A1, A2, A3.....AN]
我正在尝试计算最多包含 K 个唯一数字的所有子序列。
例如:
给定序列:: [2, 3, 3, 7, 5] 和 K = 3
所有子序列是:
[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 3],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 3],[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 3, 7],[3, 3, 5],[3, 7, 5],[3, 7, 5],
[2, 3, 3, 7],[2, 3, 3, 5],[2, 3, 7, 5],[2, 3, 7, 5],[3, 3, 7, 5],
[2, 3, 3, 7, 5]
我需要所有具有唯一元素的子序列(仅用于计数)。
✅计数的子序列是:
[],
[2],[3],[3],[7],[5],
[2, 3],[2, 3],[2, 7],[2, 5],[3, 7],[3, 5],[3, 7],[3, 5],[7, 5],
[2, 3, 7],[2, 3, 5],[2, 3, 7],[2, 3, 5],[2, 7, 5],[3, 7, 5],[3, 7, 5]
总计 = 22
⛔ 未计算的子序列是:
[3, 3],
[2, 3, 3],[3, 3, 7],[3, 3, 5]
⛔ 忽略更长的长度:length > K(如果 k = 5 则忽略重复元素???):
[2, 3, 3, 7],[2, 3, 3, 5],[3, 3, 7, 5],
[2, 3, 3, 7, 5]
[注:所有子序列不是唯一的,但它们的元素(编号)应该相同。 Ex- [2, 3],[2, 3] 都被计算,但 [3, 3] 被忽略 ]
::代码::
import itertools as it
import sys, math
n, m = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
cnt = 0
for i in range(2, m+1):
for val in it.combinations(a, i):
if len(set(val)) == i:
cnt += 1
print(1+n+cnt)
输入:
5 3
2 3 3 7 5
输出:22✔
但是我需要一个有效的解决方案,可能是使用nCretc 的数学解决方案或程序解决方案。
约束:
1 <= K <= N <= 1,000,00
1 <= Ai <= 9,000
时间: 1 sec
您的帮助/试图提供帮助将不胜感激??????。
感谢阅读????
【问题讨论】:
-
“给我一些代码”不是问题,我没有看到 c++ 标签的任何其他相关性,所以我删除了它
-
我会将
[2, 3, 3, 7, 5]转换为{2:1, 3:2, 7:1, 5:1},然后对于每个与键的组合,您乘以相应的值。 -
@Jarod42 你能解释一下吗?
-
@CeliusStingher : 表情符号不是为了影响,而是为了视觉描述。
-
@foreknownas_463035818 听起来不错。
标签: python math subsequence