#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,其复杂度为 (N5)N5/5\binom{N}{5} \approx N^5/5!。
  • 对于 N ≤ 100,最多为 75,287,520 种组合,配合合理剪枝与优化仍能在 5 秒内处理完成。