参考:https://www.cnblogs.com/Peyton-Li/p/7587372.html
发现满足条件必须存在1,然后遍历每种情况,累加。
// Study.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <vector> #include <unordered_map> #include <unordered_set> #include <queue> #include <string> #include <algorithm> using namespace std; int dfs(vector<int> &nums, int k,int sum,int product) { int result = 0; int n = nums.size(); if (k >= n ) return 0; sum += nums[k]; product *= nums[k]; if (sum < product) return 0; if (sum > product) result++; for (int i = k+1; i < n; i++) { result += dfs(nums, i, sum, product); while (i < n - 1 && nums[i] == nums[i + 1]) i++; } return result; } int main() { int n; cin >> n; vector<int> nums; int tmp; for (int i = 0; i < n; i++) { cin >> tmp; nums.push_back(tmp); } sort(nums.begin(), nums.end()); cout << dfs(nums, 0, 0, 1); system("pause"); return 0; }