터키식 룰렛

시간 제한3초메모리 제한128 MB

요약
바퀴의 인접한 두 칸을 겹치지 않게 B개의 공에 순서대로 배정해, 각 공의 값(공 번호 곱하기 두 칸의 합)의 총합이 최대가 되도록 하는 이익을 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 배열, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

터키식 룰렛은 슬롯이 SS개인 룰렛 휠로 진행하는 베팅 게임이다. 각 슬롯에는 −64-64부터 6464 사이의 정수가 하나씩 적혀 있다. 한 턴마다 플레이어들은 BB개의 공에 베팅하며, 각 공에도 −64-64부터 6464 사이의 번호가 매겨져 있다. 모든 공은 정확히 한 명의 플레이어가 베팅한다.

휠을 돌린 뒤 딜러는 BB개의 공을 하나씩 차례로 던져 넣는다. 휠이 멈추면 각 공은 아래 그림처럼 인접한 두 슬롯 위에 걸쳐진다(그림은 슬롯 32개와 공 4개가 있는 휠이다). 공 하나가 인접한 두 슬롯을 차지하므로, 휠에는 최대 ⌊S/2⌋\lfloor S/2 \rfloor개의 공이 들어갈 수 있다.

공들은 던져 넣은 상대적 순서를 그대로 유지한 채 자리를 잡는다. 즉 공 aa, bb, cc를 이 순서로 던지면, 시계 방향으로 aa 다음에 bb가, bb 다음에 cc가, 그리고 cc 다음에 다시 aa가 오도록 놓인다.

한 공의 값은 그 공의 번호에 공이 걸쳐 있는 두 슬롯 번호의 합을 곱한 값이다. 이 값이 양수이면 딜러가 그 공에 베팅한 플레이어에게 그 값만큼을 지불하고, 음수이면 그 플레이어가 그 절댓값만큼을 딜러에게 지불한다. 이 턴에서 딜러의 이익은 받은 금액의 합에서 지불한 금액의 합을 뺀 값이다.

예를 들어 위 그림에서 딜러는 번호가 −1-1인 공에 대해 $5.00를 지불하고, 번호가 −7-7인 공에 대해 $7.00를 지불하며, 번호가 1212인 공에 대해 $24.00를 받고, 번호가 33인 공에 대해서는 아무것도 주고받지 않는다. 따라서 이 턴에서 딜러의 이익은 $12.00이다(24−5−724 - 5 - 7). 딜러의 이익은 음수(손해)일 수도 있음에 유의하라.

휠의 정보, 공들의 정보, 그리고 공을 던져 넣는 순서가 주어질 때, 딜러가 한 턴에서 얻을 수 있는 최대 이익을 구하는 프로그램을 작성하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 정수 SS와 BB가 주어진다. SS는 휠의 슬롯 수(3≤S≤2503 \le S \le 250), BB는 사용하는 공의 수(1≤B≤⌊S/2⌋1 \le B \le \lfloor S/2 \rfloor)이다. 둘째 줄에는 슬롯의 번호 XiX_i가 시계 방향으로 SS개 주어진다(1≤i≤S1 \le i \le S에 대해 −64≤Xi≤64-64 \le X_i \le 64). 셋째 줄에는 공의 번호 YiY_i가 공을 던져 넣는 순서대로 BB개 주어진다(1≤i≤B1 \le i \le B에 대해 −64≤Yi≤64-64 \le Y_i \le 64). 이 순서가 곧 공들이 자리를 잡았을 때의 시계 방향 순서이다. 입력의 끝은 S=B=0S = B = 0인 줄로 표시되며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 한 줄에, 딜러가 그 턴에서 얻을 수 있는 최대 이익을 나타내는 정수 하나를 출력한다.

예제2

  1. 예제 1

    입력
    4 2
    -1 0 2 -1
    -1 1
    5 2
    3 2 -1 7 1
    2 3
    7 3
    -4 3 2 1 0 -4 -2
    -10 0 1
    4 2
    0 2 3 0
    -2 -2
    0 0
    
    예상 출력
    4
    -11
    56
    10
    
  2. 예제 2

    입력
    3 1
    1 2 3
    5
    0 0
    
    예상 출력
    -15