题解 | 小苯的01背包(easy)

小苯的01背包(easy)

https://www.nowcoder.com/practice/32407155397c443a95f895f11942f02f

思路

对结果进行按位贪心,因为高位如果可以为 1的话肯定无脑选,所以从高位到低位贪心

Code

void solve()
{
    cin >> n >> k;
    vi v(n), w(n);
    for (int i = 0; i < n; i++)
    {
        cin >> v[i] >> w[i];
    }
    int ans = 0;
    for (int j = 30; j >= 0; j--)
    {
        int now = -1;
        int cnt = 0;
        int num = (ans | (1 << j));
        for (int i = 0; i < n; i++)
        {
            if ((w[i] & num) == num)
            {
                if (cnt == 0)
                {
                    now = v[i];
                }
                else
                {
                    now &= v[i];
                }
                cnt++;
            }
        }
        if (cnt > 0 && now <= k)
        {
            ans = num;
        }
    }
    cout << ans << endl;
}

全部评论

相关推荐

评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务