当前位置:网站首页>Codeforces Round #648 (Div. 2) E.Maximum Subsequence Value

Codeforces Round #648 (Div. 2) E.Maximum Subsequence Value

2022-07-05 08:52:00 Qizi K

E.Maximum Subsequence Value

The question : to n Number , I want you to choose k Number , First turn them into 2 Base number , For binary number i position , If you choose k A few miles There are at least max(1,k−2) A digital Of binary i Is it 1, The answer is +2 Of i Power . Try to make ans Big .

tips:k>3 Certainly not better than k<=3 better .
Simple proof : If k<3, be max(1,k−2) == 1. here , The answer of the three numbers chosen is the answer of these three numbers “|” The value of the operation .( As long as this one has at least one 1, Then the answer can be increased ).
Choose these three numbers , If you choose another number (k==4), Then this number will not contribute to the original answer , Instead, it may reduce the answer .

If one of the original answers is 1:
A. This one of the original three numbers has >1 individual 1, Add the new number , This one remains the same ;
B. This one of the original three numbers has 1 individual 1, This new number is 1, This one remains the same ; otherwise , This one becomes 0 了 .
If one of the original answers is 0:
It means that the original three numbers are all 0, Add the new number , Even if the new number is 1, There is only a 1 individual 1, Less than max(1,k-2)==2, No contribution to the answer .

n<500, direct n3 Circulation is enough .

#include<bits/stdc++.h>
#define ll long long

using namespace std;

int n;
ll book[505], ans;

int main(){
    
	scanf("%d",&n);
	for(int i = 1; i <= n; ++i)	scanf("%lld",&book[i]);
	for(int i = 1; i <= n; ++i)
		for(int j = i; j <= n; ++j)
			for(int k = j; k <= n; ++k)
				ans = max(ans, book[i] | book[j] | book[k]);
	printf("%lld\n",ans);
	
	return 0;
}
原网站

版权声明
本文为[Qizi K]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140539523603.html