acwing-数字组合
https://www.acwing.com/problem/content/280/
解题思路
每一个数有两种情况,选或不选,找出所有方案,计算sum=m的方案数。
选数进阶题,加个总和大于m返回即可满分
#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
int a [110];
void dfs(int st,int sum){
if(sum>m)//总和大于m不在找了
return;
if(st==n+1){//判断新方案是否与m相等
if(sum==m)
ans++;
return ;
}
dfs(st+1,sum+a[st]);//选这个数
dfs(st+1,sum);//不选这个数
return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
dfs(1,0);
cout<<ans<<endl;
return 0;
}