比赛 国庆欢乐赛2 评测结果 TAAAAAAAATTTTTTTTTTT
题目名称 毛一琛 最终得分 40
用户昵称 xuyuqing 运行时间 35.188 s
代码语言 C++ 内存使用 8.70 MiB
提交时间 2025-10-04 11:35:08
显示代码纯文本

#include <cstdio>
#include <iostream>
#include <unordered_map>
#include <utility>
#include <vector>

using namespace std;

const int N = 21;

int n;
long long dp[(1 << N) - 1];
long long res;

int lowbit (int num) {
    return num & (-num);
}

int main () {
    
    freopen ("subsets.in", "r", stdin);
    freopen ("subsets.out", "w", stdout);
    
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> dp[1 << (i - 1)];
    }
    dp[0] = 1;
    for (int i = 1; i < (1 << n); i++) {
        int num = lowbit (i);
        if (i != num) {  
            dp[i] = dp[i - num] + dp[num];
        }
    }
    for (int i = 1; i < (1 << n); i++) {
        for (int j = i; j; j--, j &= i) {
            if (dp[i] && dp[i] == 2 * dp[j]) {
                res++;
                break;
            }
        }
    }
    cout << res << endl;
    
    return 0;
}