38pts 折半搜索求调
查看原帖
38pts 折半搜索求调
767297
r1sing楼主2025/1/5 10:19
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ll n;
ll a[44];
map <ll, ll> mp;
ll ans;
void dfs(ll cur, ll sub, ll x, bool flag)
{
	if(cur == x)
	{
		if(!flag)
			mp[sub]++;
		else
			ans += mp[-sub];
		return ;
	}
	dfs(cur + 1, sub + a[cur], x, flag);
	dfs(cur + 1, sub - a[cur], x, flag);
	dfs(cur + 1, sub, x, flag);
	return ;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);     cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	dfs(1, 0, n / 2 + 1, 0);
	dfs(n / 2 + 1, 0, n + 1, 1);
	ans--;
	cout << ans / 2;
	return 0;
}
2025/1/5 10:19
加载中...