体积
就是给你若干个数字,看看一共能组成多少种不同的和
指数型递归的经典应用指数型递归 - 小志61314 - 博客园 (cnblogs.com)
本来没啥头绪,一直dfs不出来,但想了一下,这些数都是有编号的呀,就dfs编号,编号相加就可以了
#include<iostream> #include<set> using namespace std; int n,sum; const int N=20; bool st[N]; int a[N]; set<int> q; void dfs(int u)//深度,就是每一层为选择的第几个数字 { if(u>n) { sum=0; for(int i=1;i<=n;i++) if(st[i]) sum+=a[i]; q.insert(sum); return ; } st[u]=true; dfs(u+1); st[u]=false; dfs(u+1); } int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; dfs(1); cout<<q.size()-1; return 0; } /* 指数型递归 每个数分为选和不选两种方案 两个分支,左边为选,右边为不选 */
要把0的那个答案减去
浙公网安备 33010602011771号