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

Posted kanoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 << "
";
}

 

以上是关于Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #648 (Div. 2) A-F题解

Codeforces Round #648 (Div. 2)ABCDEF(题解)

Codeforces Round #648 (Div. 2)ABCDEF(题解)

Codeforces Round #648 (Div. 2) (A-F)

Codeforces Round #648 (Div. 2).D Solve The Maze

Codeforces Round #648 (Div. 2) A - Matrix Game