比赛 国庆欢乐赛2 评测结果 TAAAAATTTTTTTTTTTTTT
题目名称 毛一琛 最终得分 25
用户昵称 LikableP 运行时间 44.560 s
代码语言 C++ 内存使用 3.46 MiB
提交时间 2025-10-04 09:58:56
显示代码纯文本
#include <iostream>
using namespace std;
typedef long long ll;

int n, ans;
int m[21];
int choose[21];

int main() {
  freopen("subsets.in", "r", stdin);
  freopen("subsets.out", "w", stdout);
  cin.tie(0)->sync_with_stdio(false), cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> m[i];
  }
  
  for (int cover = 0; cover <= (1 << n) - 1; ++cover) {
    if (__builtin_popcount(cover) < 2) continue;
    int pos = 0, sum = 0;
    for (int i = 1; i <= n; ++i) {
      if ((cover >> (i - 1)) & 1) {
        choose[++pos] = m[i];
        sum += m[i];
      }
    }
    
    if (sum & 1) continue;
    
    for (int againcover = 1; againcover <= (1 << pos) - 1; ++againcover) {
      int ssum = 0;
      for (int i = 1; i <= pos; ++i) {
        if ((againcover >> (i - 1)) & 1) ssum += choose[i];
        if (ssum > sum / 2) break;
      }
      if (ssum == sum / 2) {
        ans++;
        break;
      }
    }
  }
  
  cout << ans << endl;
  return 0;
}