题目
分析
本题可以先用暴力解决,还是用到位掩码来遍历所有可能性。然后分别计算酸度(S)和苦度(B)。但在遍历所有可能的时候,需要排除选择0个配料的问题,所以就不是从0开始,而是从1开始:
// 暴力枚举所有可能的食材组合
// 从1到(1<<n)-1,排除空集合(至少选择一种食材)
for (int mask = 1; mask < (1 << n); mask++)
{
int sour = 1; // 酸度初始为1(乘法单位元)
int bitter = 0; // 苦度初始为0(加法单位元)
// 根据位掩码计算当前组合的酸度和苦度
for (int i = 0; i < n; i++)
{
if (mask & (1 << i))
{
// 选择第i种食材
sour *= s[i];
bitter += b[i];
}
}
// 更新最小差值
min_diff = min(min_diff, abs(sour - bitter));
}
答案

思考
本题还可以用DFS解决,下面给出代码供参考。

