ac code
#include <bits/stdc++.h>
using namespace std;
const int M = 110;
int n,cnt;
int ans = 0x7fffffff;
bool st[M];
pair<int,int>p[M];
void dfs(int u,int s,int k) {
if(u == n + 1) {
if(!cnt)
return;
ans = min(ans,abs(s - k));
return ;
}
cnt ++;
dfs(u + 1,s * p[u].first,k + p[u].second);
cnt --;
dfs(u + 1,s,k);
}
int main() {
cin >> n;
for(int i = 1;i <= n;i ++)
cin >> p[i].first >> p[i].second;
dfs(1,1,0);
cout << ans;
return 0;
}
//wrong code
#include <bits/stdc++.h>
using namespace std;
const int M = 110;
int n,cnt;
int ans = 0x7fffffff;
bool st[M];
pair<int,int>p[M];
void dfs(int u,int s,int k) {
if(u == n + 1) {
if(!cnt)
return;
ans = min(ans,abs(s - k));
//cout << ans << endl;
return ;
}
for(int i = 1;i <= n;i ++) {
if(!st[i]) {
st[i] = true;
cnt ++;
dfs(u + 1,s * p[i].first,k + p[i].second);
st[i] = false;
cnt --;
}
dfs(u + 1,s,k);
}
}
int main() {
cin >> n;
for(int i = 1;i <= n;i ++)
cin >> p[i].first >> p[i].second;
dfs(1,1,0);
cout << ans;
return 0;
}