만드는 중입니다

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

셔플 게임

면접 대비

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

요약
덱 X와 덱 P1, P2가 주어질 때, P1과 P2를 순서를 유지하며 섞은 덱 Y와 X의 최장 공통 부분 수열 길이의 최댓값을 구합니다.
난이도

보통10점 중 6점

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

문제

셔플 게임은 딜러와 플레이어가 함께 하는 간단한 카드 게임이다. 처음에 같은 덱 nn장이 딜러와 플레이어에게 똑같이 주어진다. 덱의 각 카드는 무늬 C, D, H, S 중 하나와 숫자 2, 3, 4, 5, 6, 7, 8, 9, 10, A, J, K, Q 중 하나로 이루어진다. 따라서 카드는 52종류이며, 같은 카드가 덱에 여러 장 있을 수 있다.

카드를 받은 뒤 딜러는 임의의 셔플 방법으로 자신의 덱 XX를 만들어 플레이어에게 보여준다. 이후 플레이어는 다음 과정으로 덱 YY를 만든다. YY는 처음에 비어 있다.

  • 1단계. 플레이어가 받은 덱으로 덱 P1P_1과 P2P_2를 만든다. 두 덱의 카드 수는 달라도 된다.
  • 2단계. P1P_1과 P2P_2를 끼워 넣는다(인터리브). 즉 P1P_1 또는 P2P_2의 맨 아래 카드를 YY의 현재 맨 위로 옮기는 일을 두 덱에 카드가 모두 없어질 때까지 반복한다. 플레이어가 P1P_1과 P2P_2의 카드를 번갈아 옮길 필요는 없다. 딜러와 플레이어는 같은 nn장의 카드에서 각자의 덱을 만들므로, YY는 언제나 XX와 같은 카드로 이루어진다.

덱은 아래에서 위 순서로 나열한 카드열로 표기한다. 플레이어의 점수는 두 카드열 XX와 YY의 최장 공통 부분 수열(LCS)의 길이다.

예를 들어 n=5n = 5인 덱 (C2, CJ, D5, HA, S7)이 두 사람에게 주어졌다고 하자. 딜러는 X=X = (CJ, D5, HA, C2, S7)을 만들어 플레이어에게 보여준다. 플레이어는 P1=P_1 = (D5, HA)와 P2=P_2 = (CJ, S7, C2)를 만든 뒤, 이를 끼워 넣어 Y=Y = (D5, CJ, S7, HA, C2)를 만든다. 이때 (CJ, HA, C2)가 최장 공통 부분 수열이므로 점수는 3이다. 같은 P1P_1과 P2P_2로 Y=Y = (CJ, D5, HA, S7, C2)를 만들면 점수는 4가 된다.

nn, XX, P1P_1, P2P_2가 주어질 때, 2단계 이후 플레이어가 얻을 수 있는 최대 점수를 구하라.

입력

첫 줄에 양의 정수 세 개 nn, pp, qq가 주어진다(3≤n≤5003 \le n \le 500, p+q=np + q = n). nn은 처음 덱의 카드 수이고, pp와 qq는 각각 P1P_1과 P2P_2의 카드 수이다. 다음 세 줄에는 딜러의 덱 XX(nn장), 플레이어의 덱 P1P_1(pp장), P2P_2(qq장)가 차례로 주어진다. 각 카드는 무늬를 나타내는 대문자 알파벳(C, D, H, S 중 하나) 다음에 숫자(2, 3, 4, 5, 6, 7, 8, 9, 10 또는 대문자 A, J, K, Q 중 하나)가 붙어서 표기된다. 같은 줄의 카드는 해당 덱의 아래에서 위 순서로 나열된다.

출력

2단계 이후 XX, P1P_1, P2P_2로부터 플레이어가 얻을 수 있는 최대 점수를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    5 2 3
    CJ D5 HA C2 S7
    D5 HA
    CJ S7 C2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    6 3 3
    C9 HK SQ SQ H2 CA
    CA HK SQ
    H2 C9 SQ
    
    예상 출력
    4
    
  3. 예제 3

    입력
    7 3 4
    S9 C10 DJ S6 S7 SA DQ
    DJ S6 S7
    S9 C10 SA DQ
    
    예상 출력
    7