不过阳历莫名其妙求调
查看原帖
不过阳历莫名其妙求调
950927
_luo_gu楼主2024/8/23 12:36
#include <bits/stdc++.h> 
using namespace std ;
int n , a[50] ;
map <int,vector<int> > half ;
set <int> ans ;
void search1(int x,int aa,int bb,int s){
	if( x > n/2 ){
		half[(aa-bb)].push_back(s) ;
		return ;
	}
	search1(x+1,aa+a[x],bb,s|(1<<x));
	search1(x+1,aa,bb+a[x],s|(1<<x));
	search1(x+1,aa,bb,s);
	return ;
}
void search2(int x,int aa,int bb,int s){
	if( x >n ){
		for (int y : half[(bb-aa)]){
			ans.insert(y|s);
		}
		return ;
	}
	search2(x+1,aa,bb,s);
	search2(x+1,aa+a[x],bb,s|(1<<x));
	search2(x+1,aa,bb+a[x],s|(1<<x));
	return ;
}
signed main(){
	scanf("%d" , &n );
	for( int i = 1 ; i <= n ; i ++ ){
		scanf("%d" , &a[i] );
	}
	search1(1,0,0,0);
	search2(n/2,0,0,0);
	cout<<ans.size()<<endl;
	return 0;
}
2024/8/23 12:36
加载中...