编程题
### 问题描述
在一个魔法世界里,存在一种神奇的果实称为“能量果”,每个能量果都有一定的能量值。另外,还有一个神奇的容器,你可以将果实放入或者从中取出。当处理第 $i$ 个能量果时,如果选择放入能量果,容器中的能量值就会增加与能量果等量的能量;如果选择取出,容器中的能量值就会减少与能量果等量的能量。
现在,你手上有一系列能量果,你的任务是:通过有限次放入和取出的操作,使得容器中的总能量值达到指定的数值。请问,有多少种不同的方法可以达到这个数值?
### 输入格式
第一行包含两个整数:$n$ 和 $desiredSum$。其中 $n$ 代表能量果的数量 ($1 \leq n \leq 20$),而 $desiredSum$ 代表你希望容器中达到的能量值 ($0 \leq desiredSum \leq 1000$)。
接下来的一行包含 $n$ 个整数,代表每个能量果的能量值。每个能量值的范围为 $0 \leq numbers[i] \leq 1000$。
### 输出格式
输出一个整数,表示有多少种不同的方法可以使容器中的能量值达到 $desiredSum$。(放入和取出的顺序不同也是不同的方法)
### 样例输入
```text
3 1
1 1 1
```
### 样例输出
```text
3
```
### 说明
对于输入样例,存在 $3$ 种不同的方式使得容器的能量值为 $1$:
第一种:取出第一个能量果,存放后两个能量果。
第二种:存第一个能量果,取第二个能量果,存第三个能量果。
第三种:存前两个能量果,取第三个能量果。
### 评测数据规模
对于 $50$% 的评测数据,$n \leq 10$ 且 $0 \leq numbers[i],desiredSum \leq 500$。
对于 $100$% 的评测数据,$n \leq 20$ 且 $0 \leq numbers[i],desiredSum \leq 1000$。