一道搜索好题,求种数一般用dfs深搜,控制递归出口,分情况搜
#include<bits/stdc++.h> using namespace std; typedef long long LL; LL v[50],ans,n,m; void dfs(int x,LL sum) { if(x==n) { ans++; return; } dfs(x+1,sum);//不要物品x if(sum+v[x]<=m) dfs(x+1,sum+v[x]); } int main() { while(scanf("%d%d",&n,&m)==2) { for(int i=0;i<n;i++) scanf("%d",&v[i]); ans=0; dfs(0,0); printf("%lld\n",ans); } return 0; }