zoukankan      html  css  js  c++  java
  • 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 << "
    ";
    }
  • 相关阅读:
    POJ
    POJ
    POJ
    POJ-1797 Heavy Transportation
    POJ
    HDU
    CF-576 C MP3 (离散化)
    Pandas 用法汇总
    Pandas 的使用
    Numpy 算术函数
  • 原文地址:https://www.cnblogs.com/Kanoon/p/13093749.html
Copyright © 2011-2022 走看看