洛谷:P2036:Perket


洛谷:P2036:Perket

Table of Contents

题目

P2036:Perket

分析

本题可以先用暴力解决,还是用到位掩码来遍历所有可能性。然后分别计算酸度(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));
}

答案

Solution

思考

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

Previous Next