#include <iostream> #include <vector> using namespace std; int num ; vector<int> things; int n; void dfs(int sum, int pos) { if (sum == 40) { num++; return; } else if (sum>40) return; else { for (int i = pos; i <= things.size()-1; i++) { dfs(sum+ things[pos], i+1);//最难理解的部分:以当前位置及之后的每个位置为新的起点,向前搜索一步 } } } int main() { while (cin >> n) { // 注意 while 处理多个 case things.clear(); num = 0; while (n--) { int temp; cin >> temp; things.push_back(temp) ; } dfs(0, 0); cout << num << endl; } } // 64 位输出请用 printf("%lld")// 64 位输出请用 printf("%lld")