#6670. 受限的选择
受限的选择
题面:受限的选择
时间限制: 1 秒 内存限制: 256 MB
给定一个包含 n 个正整数的序列 a1, a2, ..., an,你可以对每个数独立决定是否选择它。
如果被选择的所有数字之和不超过 S,则认为这是一种合法方案。
请你计算合法方案的数量。
输入格式
第一行包含两个整数 n, S,表示数字个数和允许的最大和。
第二行包含 n 个整数 a1, a2, ..., an。
输出格式
输出一个整数,表示合法选择方案的数量。
数据范围
对于所有测试点:
1 <= n <= 20
0 <= S <= 10^18
1 <= ai <= 10^9
保证答案不超过 2^n。
样例
输入
3 5
1 2 3
输出
7
说明
一共有 2^3 = 8 种选择方式。
只有选择 1, 2, 3 三个数字时,总和为 6,超过 5,不合法。
因此合法方案数为 7。
4. 测试点说明表
| 测试点编号 | n ≤ | S ≤ | 特殊性质 | 设计目的 |
|---|---|---|---|---|
| 1 | 0 | 只有空集合法 | 覆盖最小规模和 S = 0 边界 |
|
| 2 | 3 | 5 | 样例数据 | 验证基础 DFS 枚举逻辑 |
| 3 | 4 | 3 | 所有元素相同且较小 | 检查重复元素下按“位置”计数是否正确 |
| 4 | 5 | 10 | 普通递增序列 | 覆盖正常组合计数 |
| 5 | 6 | 100 | 所有方案均合法 | 检查答案是否能达到 2^n |
| 6 | 8 | 15 | 所有元素相同 | 考查组合数统计与边界和 |
| 7 | 10 | 50 | 元素为 2 的幂 | 覆盖唯一子集和结构 |
| 8 | 20 | 10 | 极限 n,全部为 1 | 覆盖大答案、重复值和极限枚举规模 |