#11953. 问题 [020]:Choose Cards 2
问题 [020]:Choose Cards 2
问题 [020]:Choose Cards 2 (难度:中等) 竞技编程-提高思维
题目描述
你有 N
张卡片,第 i
张卡片上写有一个整数 A[i]
。
现在你想从这些卡片中选择 恰好 5 张,问有多少种选择方式可以使得这 5 张卡片上的数字之和恰好为 1000。
输入格式
- 第一行一个整数
N
,表示卡片的数量。(5 ≤ N ≤ 100
) - 第二行
N
个整数A[1], A[2], ..., A[N]
,表示每张卡片上的数字。(1 ≤ A[i] ≤ 1000
)
输出格式
- 输出一个整数,表示使得选中 5 张卡片之和恰好为 1000 的不同选择方式总数。
示例
输入示例 1:
5
100 150 200 250 300
输出示例 1:
1
解释:选择全部 5 张卡片,总和为 1000,正好符合条件。
输入示例 2:
13
243 156 104 280 142 286 196 132 128 195 265 300 130
输出示例 2:
4
解释:有以下 4 种组合方式使得选中 5 张卡片的和为 1000:
- 1, 8, 10, 12, 13
- 2, 3, 4, 10, 11
- 2, 6, 9, 12, 13
- 4, 8, 9, 10, 11
时间复杂度分析
- 枚举所有 5 张卡片的组合时间复杂度为 O(N^5) 太高,但我们可以使用组合生成器,如
itertools.combinations
,其复杂度为 !。 - 对于
N ≤ 100
,最多为 75,287,520 种组合,配合合理剪枝与优化仍能在 5 秒内处理完成。