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)