题意:
在给定的序列中选择一个子序列,假设子序列里有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 ",Max); }