#include<bits/stdc++.h>
using namespace std;
int a[100000];
bool b[1000];
int v[1000];
int n;
int ans;
void dfs (int dep,int sum)
{
if(dep>n)
{
a[sum]++;
return;
}
dfs(dep+1,sum);
dfs(dep+1,sum+=v[dep]);
sum-=v[dep];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
dfs(v[1],0);
for(int i=0;i<100000;i++)
{
if(a[i]>=1)
ans++;
}
cout<<ans-1<<endl;
return 0;
}
题目描述 给出n件物品,每件物品有一个体积Vi,求从中取出若干件物品能够组成的不同的体积和有多少种可能。例如, n = 3, Vi = (1, 3, 4),那么输出6种,6种不同体积和具体为1、3、4、5、7、8。
输入 第1行1个正整数,表示n。
第2行n个正整数,表示Vi,每两个数之间用一个空格隔开。
输出
一行一个数,表示不同的体积和有多少种可能。
样例输入 3 1 3 4
样例输出 6
对于30%的数据满足:n<=5, Vi<=10。 对于60%的数据满足:n<=10, Vi<=20。 对于100%的数据满足:n<=20, 1<=Vi<=50。 帮我看看,谢谢