#include <bits/stdc++.h>
using namespace std;
int n;
long long suan[55],ku[55];
int ct=0;
int pp[400000];
bool vs[400000];
void dfs(int sd,long long s,long long k)
{
if (sd<n)
{
pp[ct]=abs(s-k);
ct++;
}
else
{
pp[ct]=abs(s-k);
ct++;
return;
}
for (int i=sd;i<=n;i++)
{
if (!vs[i])
{
vs[i]=1;
if (s!=0)
{
dfs(sd+1,s*suan[i],k+ku[i]);
}
else
{
dfs(sd+1,suan[i],k+ku[i]);
}
vs[i]=0;
}
}
return;
}
int main()
{
cin>>n;
for (int i=0;i<400000;i++) vs[i]=0;
for (int i=1;i<=n;i++)
{
cin>>suan[i]>>ku[i];
}
dfs(0,0,0);
sort (pp,pp+ct-1);
int zz=0;
while (pp[zz]==0)zz++;
cout <<pp[zz];
}
代码问题不是很大,但也有点大,整体上好像没啥问,就第一个和最后一个测试点没过,盖了帽了