CF1365E Maximum Subsequence Value(思维)

题意:

在给定的序列中选择一个子序列,假设子序列里有k个数,当至少有max(1,k-2)个数在二进制第i位上为1的时候,对答案有2^i贡献。

题解:

假设选了k个数,那么根据题面,假设有大于等于k-2个数包含二进制的第i位。

现在从k个数中任选3个,如果原来有大于等于k-2个数包含二进制的第i位,那么我选择的三个数也至少有一个数包含这一位二进制,所以选择三个数就能达到最优解。

暴力枚举,时间复杂度O(n^3)。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+100;
typedef long long ll;
ll a[maxn];
int n;
int main () {
    scanf("%d",&n);
    for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
    ll Max=0;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            for (int k=1;k<=n;k++)
                Max=max(Max,a[i]|a[j]|a[k]);
    printf("%lld\n",Max);
}
 

 

posted @ 2020-06-11 14:13  zlc0405  阅读(235)  评论(0编辑  收藏  举报