#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")
可能会存在爆内存的问题