奉上代码(逻辑会更清晰一点):
```cpp
#include <bits/stdc++.h>
using namespace std;
long long n;
long long s[110], b[110];// 酸度和苦度
long long ans = 1e9;// 10^9,储存答案
void dfs(long long x, long long y, long long id, long long cnt){// x代表酸度,y代表苦度,id是当前调料的序号,cnt是计数器
if(cnt >= 1){
ans = min(abs(x-y), ans);// abs求绝对值
}
if(id > n){
return;// 超出范围就r
}
dfs(x * s[id], y + b[id], id+1, cnt+1);// 可以就更新酸度和苦度和序号和计数器
dfs(x, y, id+1, cnt);// 不可以就只用更新序号
}
int main(){
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> s[i] >> b[i];
}
dfs(1, 0, 1, 0);// 酸度初始值是1,因为如果是0,乘不起来forever,id从1开始
cout << ans << endl;
return 0;
}
// Luogu P2036 [COCI2008-2009#2] PERKET
```
by Mark_Yiyang @ 2023-05-03 22:01:12
谢谢,此帖结
by mengleo @ 2023-05-04 18:58:10