思路
只要看看要不要选第u个数就好
DFS
#include <iostream>
using namespace std;
const int N = 110;
int n, m;
int a[N];
int res;
void dfs(int u, int cnt){
if(u > n + 1) return; //超过数组长度 别问为什么是n + 1, 问就是最后一个数也要递归 (是不是该从0开始)
if(cnt > m) return; //剪枝? 超过之后就不需要继续看下去
if(cnt == m) { res ++; return; } // 正确结果
dfs(u + 1, cnt + a[u]); // 选
dfs(u + 1, cnt); // 不选
}
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i ++) cin >> a[i];
dfs(1, 0);
cout << res << endl;
}