小明手上有 N!!!张纸币(他的钱很奇怪,可以是任意的正整数),现在他想知道 用这N种纸币可以组合出多少种不同的总额出来。
输入
第一行一个N.
第二行N个正整数,总和不超过10^8
输出
如题
思路:用递归来写,你可以选择当前第i个数选或不选再将最后结果保存
CODE:
#include<bits/stdc++.h>
using namespace std;
int v[210],n;
bool f[100000010];
void dfs(int dep,int sum) {
if(dep==n+1) {
f[sum]=true;
return ;
}
dfs(dep+1,sum+v[dep]);//加上当前这个数
dfs(dep+1,sum);//不加上当前这个数
}
int main() {
cin>>n;
for(int i=1; i<=n; i++)
cin>>v[i];
dfs(1,0);
int ans=0;
for(int i=1; i<=100000000; i++)
if(f[i])
ans++;
cout<<ans<<endl;
return 0;
}