不同体积和
原创
©著作权归作者所有:来自51CTO博客作者yitahutu79的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
给出 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;
}