만드는 중입니다

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

상자 공장 (라지)

시간 제한5초메모리 제한512 MB

요약
구간별로 압축된 상자와 장난감 목록에서 종류가 같은 쌍을 순서대로 맞춰 출고량을 최대로 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열 매칭
정답자
아직 제출이 없습니다

문제

공장에 조립 라인이 두 개 있다. 첫 번째 라인은 상자를 만들고, 두 번째 라인은 그 상자에 담을 장난감을 만든다. 상자와 장난감에는 종류 번호가 붙어 있고, 종류 번호가 같은 상자와 장난감만 짝이 된다.

먼저 첫 번째 라인에서 상자를 하나 집고, 두 번째 라인에서 장난감을 하나 집는다. 그다음부터는 아래 동작을 원하는 만큼 반복한다.

  • 들고 있는 상자를 버리고 다음 상자를 집는다.
  • 들고 있는 장난감을 버리고 다음 장난감을 집는다.
  • 상자와 장난감의 종류가 같으면 장난감을 상자에 넣어 고객에게 보내고, 다음 상자와 다음 장난감을 집는다.

상자는 만들어진 순서대로만 집을 수 있고, 장난감도 마찬가지다. 두 라인이 무엇을 어떤 순서로 만드는지는 미리 알고 있다. 고객에게 보내는 포장 완성품의 개수를 최대로 하는 전략을 세워서, 그 최대 개수를 구하라.

두 라인은 상자와 장난감을 아주 많이 만든다. 다만 한 종류를 오랫동안 만든 뒤에 다른 종류로 바꾸는 식이다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 두 정수 NN과 MM이 주어진다. 다음 줄에는 2N2N개의 정수 a1,A1,a2,A2,…,aN,ANa_1, A_1, a_2, A_2, \dots, a_N, A_N이 주어지고, 그다음 줄에는 2M2M개의 정수 b1,B1,b2,B2,…,bM,BMb_1, B_1, b_2, B_2, \dots, b_M, B_M이 주어진다.

첫 번째 라인은 종류가 A1A_1인 상자를 a1a_1개 만들고, 이어서 종류가 A2A_2인 상자를 a2a_2개 만들며, 마지막으로 종류가 ANA_N인 상자를 aNa_N개 만든다. 두 번째 라인도 같은 방식으로 종류가 B1B_1인 장난감 b1b_1개부터 종류가 BMB_M인 장난감 bMb_M개까지 만든다. 이웃한 두 구간의 종류 번호가 같을 수도 있다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤ai,bi≤10161 \le a_i, b_i \le 10^{16}
  • 1≤Ai,Bi≤1001 \le A_i, B_i \le 100
  • 1≤N,M≤1001 \le N, M \le 100

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 고객에게 보낼 수 있는 포장 완성품의 최대 개수다.

예제2

  1. 예제 1

    입력
    4
    3 3
    10 1 20 2 25 3
    10 2 30 3 20 1
    3 5
    10 1 6 2 10 1
    5 1 3 2 10 1 3 2 5 1
    3 5
    10 1 6 2 10 1
    5 1 6 2 10 1 6 2 5 1
    1 1
    5000000 10
    5000000 100
    
    예상 출력
    Case #1: 35
    Case #2: 20
    Case #3: 21
    Case #4: 0
    
  2. 예제 2

    입력
    2
    1 3
    6 1
    2 1 3 2 4 1
    2 2
    3 1 4 2
    4 2 3 1
    
    예상 출력
    Case #1: 6
    Case #2: 4