#include <iostream>
#include <vector>
using namespace std;
int findWays(int index, int currentVolume, const vector<int>& volumes, int n) {
// 如果当前总体积已经达到40,找到一种方法
if (currentVolume == 40) {
return 1;
}
// 如果当前总体积超过40或者已经考虑完所有物品,结束当前路径
if (currentVolume > 40 || index == n) {
return 0;
}
// 尝试两种情况:选择当前物品和不选择当前物品,然后返回总的方法数
return findWays(index + 1, currentVolume + volumes[index], volumes,
n) + // 选当前物品
findWays(index + 1, currentVolume, volumes,
n); // 不选当前物品
}
int main() {
int n;
cin >> n;
vector<int> volumes(n);
for (int i = 0; i < n; ++i) {
cin >> volumes[i];
}
cout << findWays(0, 0, volumes, n) << endl;
}
// 64 位输出请用 printf("%lld")
可能会存在爆内存的问题

京公网安备 11010502036488号