有n件物品,每件物品有一个体积Vi,求从中取出若干件物品能够组成的不同体积和有多少种可能。例如,n=3,Vi=(1,3,4),那么输出6,6种方案不同体积有1,3,4,5,7,8(n≤20,1≤Vi≤50)
输入
第一行:n
接下来输入n个数,表示每一个物品的体积。
输出
输出组成不同体积和有多少种可能。
样例
样例输入1
3
1 3 4
样例输出1
6
代码
#include<bits/stdc++.h>
using namespace std;
int n,v[25],ans=0;
bool flag[1025];
void f(int a,int b)
{
if(a>n)return;
if(flag[b]==0)
{
flag[b]=1;
ans++;
}
if(a+1<=n)
{
f(a+1,b+v[a+1]);
f(a+1,b);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
for(int i=1;i<=n;i++)
{
f(i,v[i]);
}
cout<<ans;
return 0;
}