幸运的袋子

参考: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;
}

 

posted @ 2018-08-27 09:57  何许  阅读(292)  评论(0编辑  收藏  举报