钱币组合加强版本+

小明手上有 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;
}

Guess you like

Origin blog.csdn.net/weixin_55599629/article/details/120013863