在自己编译器上可以运行,在洛谷上怎么不行??
查看原帖
在自己编译器上可以运行,在洛谷上怎么不行??
1343286
Mincraft_Player楼主2025/1/11 12:01
#include<map>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2e6+10;
int n,ans,tot,a[25],cnt[N];
vector<int>v[N];
map<int,int>mp;
void dfs1(int k,int sum,int now){
	if(k>n/2){
		if(mp[sum]==0)mp[sum]=++tot;
		v[mp[sum]].push_back(now);
		return;
	}
	dfs1(k+1,sum+a[k],now|(1<<k-1));
	dfs1(k+1,sum-a[k],now|(1<<k-1));
	dfs1(k+1,sum,now);
}
void dfs2(int k,int sum,int now){
	if(k>n){
		int x=mp[sum];
		if(x){
			for(int i=0;i<v[x].size();i++)
				cnt[v[x][i]|now]=1;
		}
		return;
	}
	dfs2(k+1,sum+a[k],now|(1<<k-1));
	dfs2(k+1,sum-a[k],now|(1<<k-1));
	dfs2(k+1,sum,now);
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",a+i);
	dfs1(1,0,0);
	dfs2(n/2+1,0,0);
	for(int i=1;i<=1<<n;i++)
		ans+=cnt[i];
	printf("%d",ans);
	return 0;
}
2025/1/11 12:01
加载中...