지그재그 수열

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

요약
인접한 두 원소를 골라 둘의 XOR로 바꾸는 연산을 최소 횟수로 적용해 수열을 지그재그 수열로 만드는 문제이다.
난이도

보통10점 중 7점

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

문제

길이 nn의 수열 \[a_1,⋯ ,a_n]\[a\_{1},\cdots ,a\_{n}]이 지그재그 수열이라는 것은 다음 두 조건 중 하나를 만족하는 것이다.

  • 모든 1≤i≤n−11\leq i \leq n-1에 대해, ii가 짝수이면 a_i<a_i+1a\_{i} < a\_{i+1}이고 ii가 홀수이면 a_i>a_i+1a\_{i} > a\_{i+1}
  • 모든 1≤i≤n−11\leq i \leq n-1에 대해, ii가 짝수이면 a_i>a_i+1a\_{i} > a\_{i+1}이고 ii가 홀수이면 a_i<a_i+1a\_{i} < a\_{i+1}

길이가 11인 모든 수열은 지그재그 수열이다.

길이 NN의 수열 AA가 주어진다. 당신은 한 연산에서 수열 AA에서 인접한 두 원소 A_iA\_i와 A_i+1A\_{i+1}을 골라 두 수를 수열에서 제거한 후, 그 자리에 두 수의 XOR을 넣을 수 있다.

AA를 지그재그 수열로 만들기 위한 최소 연산 횟수를 출력하라.

입력

첫째 줄에 NN이 주어진다. (2≤N≤5,000)(2 \leq N \leq 5\\,000)

둘째 줄에 A_1,A_2,…,A_NA\_1, A\_2, \ldots, A\_N이 공백으로 구분되어 주어진다. (0≤A_i≤4,095)(0 \le A\_i \le 4\\,095)

출력

첫째 줄에 AA를 지그재그 수열로 만들기 위한 최소 연산 횟수를 출력한다.

힌트

두 수의 XOR 연산은, 두 수를 이진수로 나타냈을 때 각 비트 자리에서 서로 다르면 11, 같으면 00이 되는 비트 연산이다. 예를 들어, 66과 44를 이진수로 나타내면 각각 110_(2)110\_{(2)}, 100_(2)100\_{(2)}이 되고, 두 수를 XOR한 값은 010_(2)010\_{(2)}으로 22가 된다.

예제2

  1. 예제 1

    입력
    5
    2 4 5 4 2
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5
    1 2 3 4 5
    
    예상 출력
    2