题目描述
​ 给出 n 件物品,每个物品有一个体积 Vi,从中取出若干件物品能够组成的不同的体积和有多少种可能。例如,n=3 , Vi={1,3,4},那么输出 6,6 种不同的体积和为 1,3,4,5,7,8。

输入
​ 第一行一个正整数 n。(n≤20)

第二行 n 个整数,表示 Vi。(1≤Vi≤50)

输出
​ 输出一个整数,表示不同体积的组合数。

样例输入
3
1 3 4
样例输出
6
数据规模与约定
​ 时间限制:1 s

内存限制:256 M

100% 的数据保证 n≤20

#include <iostream>
using namespace std;

int n, num[25], check[1005], ans;
void func(int s, int sum) {

for (int i = s; i < n; i++) {
sum += num[i];
if (check[sum] == 0) {
ans++;
check[sum] = 1;
}

func(i + 1, sum);
sum -= num[i];
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
func(0, 0);
cout << ans << endl;
return 0;
}
#include <iostream>
using namespace std;

int n, num[25], check[1005] = {1}, ans;

void func(int s, int sum) {
if (check[sum] == 0) {
ans++;
check[sum] = 1;
}
for (int i = s; i <= n; i++) {
sum += num[i];
func(i + 1, sum);
sum -= num[i];
}
}

int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
func(0, 0);
cout << ans << endl;
return 0;
}