만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

호반우가 학교에 지각한 이유 6

시간 제한1초메모리 제한1024 MB

요약
음이 아닌 정수 N개로 된 배열을 XOR 병합 주문 네 가지로 줄여 정확히 M개로 만들 때, 원소 합의 최댓값을 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

마왕에게 거의 다다른 호반우지만, 마왕의 옥좌로 들어가는 문이 잠겨 있어 들어가지 못하고 있다.

문을 열려면 길이가 NN인 마법 열쇠를 길이가 정확히 MM인 마법 열쇠로 만들어야 한다. 이때 마법 열쇠의 힘을 최대한 크게 만들어야 한다.

길이가 ℓ\ell인 마법 열쇠는 음이 아닌 정수 ℓ\ell개로 이루어진 수열 a1,a2,a3,⋯ ,aℓa_{1}, a_{2}, a_{3}, \cdots, a_{\ell}을 가진다. 마법 열쇠의 힘은 이 수열을 구성하는 수들의 합으로 정의한다.

길이가 ℓ\ell인 마법 열쇠에는 다음 4가지 마법 중 하나를 적용하여 길이를 줄일 수 있다.

  1. a1a_{1}과 a2a_{2}를 제거하고 앞에 a1⊕a2a_{1}\oplus a_{2}를 추가하여 길이가 ℓ−1\ell-1인 마법 열쇠를 만든다. 수열은 (a1,a2,a3,⋯ ,aℓ)⇒(a1⊕a2,a3,⋯ ,aℓ)(a_{1}, a_{2}, a_{3}, \cdots, a_{\ell}) \Rightarrow (a_{1}\oplus a_{2}, a_{3}, \cdots, a_{\ell})로 바뀐다.
  2. aℓ−1a_{\ell-1}과 aℓa_{\ell}을 제거하고 뒤에 aℓ−1⊕aℓa_{\ell-1}\oplus a_{\ell}을 추가하여 길이가 ℓ−1\ell-1인 마법 열쇠를 만든다. 수열은 (a1,⋯ ,aℓ−2,aℓ−1,aℓ)⇒(a1,⋯ ,aℓ−2,aℓ−1⊕aℓ)(a_{1}, \cdots, a_{\ell-2}, a_{\ell-1}, a_{\ell}) \Rightarrow (a_{1}, \cdots, a_{\ell-2}, a_{\ell-1}\oplus a_{\ell})로 바뀐다.
  3. a1,a2,a3,a4a_{1}, a_{2}, a_{3}, a_{4}를 제거하고 앞에 a2⊕a3,a1⊕a4a_{2}\oplus a_{3}, a_{1}\oplus a_{4}를 추가하여 길이가 ℓ−2\ell-2인 마법 열쇠를 만든다. 수열은 (a1,a2,a3,a4,a5,⋯ ,aℓ)⇒(a2⊕a3,a1⊕a4,a5,⋯ ,aℓ)(a_{1}, a_{2}, a_{3}, a_{4}, a_{5}, \cdots, a_{\ell}) \Rightarrow (a_{2}\oplus a_{3}, a_{1}\oplus a_{4}, a_{5}, \cdots, a_{\ell})로 바뀐다.
  4. aℓ−3,aℓ−2,aℓ−1,aℓa_{\ell-3}, a_{\ell-2}, a_{\ell-1}, a_{\ell}을 제거하고 뒤에 aℓ−3⊕aℓ,aℓ−2⊕aℓ−1a_{\ell-3}\oplus a_{\ell}, a_{\ell-2}\oplus a_{\ell-1}을 추가하여 길이가 ℓ−2\ell-2인 마법 열쇠를 만든다. 수열은 (a1,⋯ ,aℓ−4,aℓ−3,aℓ−2,aℓ−1,aℓ)⇒(a1,⋯ ,aℓ−4,aℓ−3⊕aℓ,aℓ−2⊕aℓ−1)(a_{1}, \cdots, a_{\ell-4}, a_{\ell-3}, a_{\ell-2}, a_{\ell-1}, a_{\ell}) \Rightarrow (a_{1}, \cdots, a_{\ell-4}, a_{\ell-3}\oplus a_{\ell}, a_{\ell-2}\oplus a_{\ell-1})로 바뀐다.

입력

첫째 줄에 마법 열쇠의 길이 NN과 목표 길이 MM이 공백으로 구분되어 주어진다. (4≤M≤N≤3 0004 \le M \le N \le 3\,000)

둘째 줄에 NN개의 수 a1,a2,a3,⋯ ,aNa_{1}, a_{2}, a_{3}, \cdots, a_{N}이 공백으로 구분되어 주어진다. (0≤ai≤1090 \le a_{i} \le 10^{9})

출력

길이가 MM인 마법 열쇠를 만들었을 때 가능한 마법 열쇠의 힘 중 최댓값을 출력한다.

힌트

⊕\oplus는 비트 단위로 계산하는 비트 XOR 연산이다.

Bitwise XOR

  • 두 수의 같은 자리 비트를 비교한다.
    • 두 비트가 서로 다르면 결과는 11이고, 같으면 00이다.
  • 예시:

01102=6⊕ 11002=1210102=10\begin{aligned} 0110_{2} &= 6 \\ \oplus \ 1100_{2} &= 12 \\ 1010_{2} &= 10 \end{aligned}

예제2

  1. 예제 1

    입력
    6 4
    1 2 3 4 5 6
    
    예상 출력
    17
    
  2. 예제 2

    입력
    8 5
    12 45 71 23 53 7 25 9
    
    예상 출력
    217