超时两个点
查看原帖
超时两个点
916380
yyjw14楼主2024/2/22 21:59
#include<bits/stdc++.h>

const int N = 15;

int b[N], s[N];
long long ans = 0x3f3f3f;
bool vis[N];
int n;
int cntt = 1;
inline void dfs(int dep, long long sum, long long sum1)
{
	if(dep > n)
	{
		if(sum == 0 && sum1 == 0 || (sum == 1 && sum1 == 0))
		{
			return;
		}
		ans = std::min(abs(sum - sum1), ans);

		if(ans == 0)
		{
			std::cout << 0;
			exit(0);
		}
		return;
	}
	else
	{
		for(int i = 1; i <= n; i ++)
		{
			if(vis[i] == 0)
			{
				vis[i] = 1;
				
				if(sum != 0)
				{
					dfs(dep + 1, s[i] * sum, sum1 + b[i]);
				}
				else
				{
					dfs(dep + 1, 1 * s[i], sum1 + b[i]);
				}
				
				
				vis[i] = 0;
				dfs(dep + 1, sum, sum1);
			}
			
			
			
		}
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);

	
	std::cin >> n;
	for(int i = 1; i <= n; i ++)
		std::cin >> s[i] >> b[i];
	ans = 0x3f3f3f;
	dfs(1, 0, 0);
	std::cout << ans;
}
2024/2/22 21:59
加载中...