14WA求调
查看原帖
14WA求调
431095
Druid楼主2024/11/27 15:47
#include <bits/stdc++.h>
using namespace std;
int a[21],ans,n,visit[214514],l=0,t1=1,t2=1;
map<int,vector<int>> mp;
map<pair<int,int>,bool> vis;
vector<int> zhi;
int x,y;
void dfs1(int k,int ti)
{
	if(k==n/2) {
		mp[x+a[k]-y].push_back(ti);
		mp[x-a[k]-y].push_back(ti);
		mp[x-y].push_back(++t1);
		return;
	}
	x+=a[k];//放第一个集合
	dfs1(k+1,ti);
	x-=a[k];
	y+=a[k];//放第二个集合
	dfs1(k+1,ti);
	y-=a[k];
	dfs1(k+1,++t1);//都不放
	return;
}
void dfs2(int k,int ti)
{
	if(k==n) {
		zhi=mp[y-x-a[k]];
		for(auto i:zhi)
			if(vis[make_pair(i,ti)]=0) {
				vis[make_pair(i,ti)]=1;
				ans++;
			}
		zhi=mp[y-x+a[k]];
		for(auto i:zhi)
			if(vis[make_pair(i,ti)]=0) {
				vis[make_pair(i,ti)]=1;
				ans++;
			}
		ans+=mp[y-x].size();
		return;
	}
	x+=a[k];//放第一个集合
	dfs2(k+1,ti);
	x-=a[k];
	y+=a[k];//放第二个集合
	dfs2(k+1,ti);
	y-=a[k];
	dfs2(k+1,t2++);//都不放
	return;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	x=0;
	y=0;
	dfs1(1,1);
	x=0;
	y=0;
	dfs2(n/2+1,1);
	cout<<ans;
	return 0;
}
2024/11/27 15:47
加载中...