#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 覆盖大答案、重复值和极限枚举规模