Codeforces Round #648 (Div. 2) E.Maximum Subsequence Value
제목: n 개의 수 를 주 고 k 개의 수 를 선택 하 라. 먼저 그들 을 2 진법 으로 바 꾸 고 2 진법 의 i 위 에 대해 서 는 k 개의 수 에 max (1, k - 2) 개의 숫자 가 있 는 2 진법 의 i 위 가 1 이 라면 답 은 + 2 의 i 제곱 이다.최대한
tips: k > 3 은 k < = 3 보다 더 좋 지 않 습 니 다.간단 한 증명: k < 3 이면 max (1, k - 2) = 1. 이때 선택 한 세 개의 숫자 로 계산 한 답 은 바로 이 세 개의 수의 "|" 연산 의 값 이다.(이 한 사람 이 적어도 한 사람 이 있 으 면 답 은 증가 할 수 있다).이 세 개 수 를 고 른 후 한 개 수 (k = = 4) 를 더 고 르 면 이 수 는 기 존의 답 에 기여 하지 않 고 오히려 답 을 줄 일 수 있다.[원래 답 의 한 분 이 1: A 라면 원래 세 개의 숫자 인 이 분 은 > 1 개 1 이 고 새 숫자 를 더 하면 이 분 은 변 하지 않 습 니 다. B. 원래 세 개의 숫자 인 이 분 은 1 개 1 이 고 새 숫자 인 이 분 은 1 입 니 다. 이 분 은 변 하지 않 습 니 다. 그렇지 않 으 면 이 분 은 0 이 됩 니 다. 원래 답 의 한 분 이 0 이 라면 원래 세 개의 숫자 인 이 분 은 0 이 고 새 숫자 를 더 하면 새 숫자 가 되 더 라 도 0 이 됩 니 다.의 이 분 은 1 이 고 1 개 만 있 으 며 max (1, k - 2) = = 2 보다 작 아 답 에 기여 하지 않 았 습 니 다.]
n < 500, 직접 n3 순환 하면 됩 니 다.
#include
#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
",ans);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.