记录编号 606947 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 4179.毛一琛 最终得分 100
用户昵称 Gravatar梦那边的美好RE 是否通过 通过
代码语言 C++ 运行时间 2.007 s
提交时间 2025-10-04 18:11:29 内存使用 30.03 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=(1<<20)+7;
int ans[N],w,k,a[N];
int n,half,tot; 
vector<int>b[N];
map<int,int>p;
void dfs1(int x,int sum,int now){	
    if(x>half){
        if(p[sum]==0){
        	p[sum]=++tot;
        }
        b[p[sum]].push_back(now);
        return;
    }
	dfs1(x+1,sum,now);
    dfs1(x+1,sum+a[x],now|(1<<(x-1)));	
	dfs1(x+1,sum-a[x],now|(1<<(x-1)));
} 
void dfs2(int x,int sum,int now){
    if(x>n){
        if(p[sum]!=0){
        	for(auto v:b[p[sum]]){
        		ans[v|now]=1;
        	}
        }
        return;
    }
	dfs2(x+1,sum,now);
    dfs2(x+1,sum+a[x],now|(1<<(x-1)));	
	dfs2(x+1,sum-a[x],now|(1<<(x-1)));
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);	
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
	half=(n>>1);
	dfs1(1,0,0);
	dfs2(half+1,0,0);
	int sum=0;
	for(int i=1;i<=(1<<n);i++){
		sum+=ans[i];	
	}
	
	cout<<sum;

	return 0;
}