思路就是提前选一种并做了标记,然后进行搜索,未标记的都有选与不选两个方向,用的回溯,不知道哪里有问题(((φ(◎ロ◎;)φ)))
#include<bits/stdc++.h>
using namespace std;
struct aaa{
int sour, sweet;
}a[12];
int n, mul = 1, sum, miner = 1e9+7, mark;
void dfs(int t){
if(t > n) {
miner = min(miner, abs(mul - sum));
return;
}
if(t != mark){
mul *= a[t-1].sour; sum += a[t-1].sweet;
dfs(t+1);
mul /= a[t-1].sour; sum -= a[t-1].sweet;
}
dfs(t+1);
}
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i].sour >> a[i].sweet;
for(int i = 0; i < n; i++){
mark = i+1; mul *= a[i+1].sour, sum += a[i+1].sweet;
dfs(1);
}
cout << miner;
return 0;
}