Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)

题目链接:https://codeforces.com/problemset/problem/1365/E

题意

有 $n$ 个元素,定义大小为 $k$ 的集合值为 $sum2^i$,其中,若集合内至少有 $max(1, k - 2)$ 个数二进制下第 $i$ 位为 $1$,则第 $i$ 位有效,求一个集合可以得到的最大值。

题解

每个 $k > 3$ 的集合的值一定小于等于 $k = 3$ 的子集合的值,所以枚举大小 $1 sim 3$ 的集合即可。

证明

如果原集合中某一位有效,则至少在 $k - 2$ 个数中该位有效,即最多有两个数不含该位,所以由鸽巢原理,选出的三个数中至少有一个数含有该位。

代码

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
    int n; cin >> n;
    ll a[n] = {};
    for (int i = 0; i < n; i++)
        cin >> a[i];
    ll ans = 0;
    for (int i = 0; i < n; i++)
        for (int j = i; j < n; j++)
            for (int k = j; k < n; k++)
                ans = max(ans, a[i] | a[j] | a[k]);
    cout << ans << "
";
}
原文地址:https://www.cnblogs.com/Kanoon/p/13093749.html