아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

재미있는 카드 게임

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

요약
안나는 카드를 임의로 지울 수 있고 브루노는 위아래에서만 지울 수 있을 때, 두 사람이 만들 수 있는 가장 긴 공통 부분 배열의 길이를 구한다.
난이도

보통10점 중 6점

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

문제

11부터 10001000까지의 정수 중 하나가 적힌 카드가 많이 있다. 안나(Anna)와 브루노(Bruno)는 이 카드들로 다음과 같은 게임을 한다.

안나는 AA장, 브루노는 BB장의 카드로 이루어진 더미를 가지고 있다. 안나는 자신의 AA장 중에서 임의의 몇 장(00장이어도 된다)을 골라 버리고 새로운 더미를 만든다. 브루노는 자신의 BB장짜리 더미에서 맨 위에서부터 몇 장(00장이어도 된다)과 맨 아래에서부터 몇 장(00장이어도 된다)을 버리고 새로운 더미를 만든다. 단, 카드를 버릴 때 남은 카드의 순서는 바꾸지 않는다.

이렇게 만든 두 더미가 서로 일치하면, 그 더미에 들어 있는 카드의 장수가 두 사람의 점수가 된다. 여기서 두 더미가 일치한다는 것은 두 더미에 들어 있는 카드의 장수 nn이 같고, 위에서 ii번째 (1≤i≤n1 \le i \le n) 카드에 적힌 정수가 모두 같다는 뜻이다.

예를 들어 안나가 위에서부터 1,2,3,4,51, 2, 3, 4, 5가 적힌 5장의 더미를, 브루노가 위에서부터 3,1,4,13, 1, 4, 1이 적힌 4장의 더미를 가지고 있다고 하자. 이때 안나가 2,3,52, 3, 5가 적힌 카드를 버리고 브루노가 맨 위의 33과 맨 아래의 11을 버리면, 두 더미는 모두 위에서부터 1,41, 4가 되어 일치한다. 남은 더미의 카드는 2장이므로 두 사람은 점수 22를 얻는다.

두 사람이 얻을 수 있는 점수의 최댓값을 구하려고 한다. 안나와 브루노가 가진 카드 더미의 정보가 주어질 때, 점수의 최댓값을 구하는 프로그램을 작성하여라.

입력

표준 입력으로 다음 데이터가 주어진다.

  • 첫째 줄에 두 정수 AA, BB가 공백으로 구분되어 주어진다.
  • 둘째 줄에 AA개의 정수가 공백으로 구분되어 주어진다. ii번째 정수 (1≤i≤A1 \le i \le A)는 안나의 더미에서 위에서 ii번째 카드에 적힌 정수이다.
  • 셋째 줄에 BB개의 정수가 공백으로 구분되어 주어진다. jj번째 정수 (1≤j≤B1 \le j \le B)는 브루노의 더미에서 위에서 jj번째 카드에 적힌 정수이다.

제한

  • 1≤A≤50001 \le A \le 5000
  • 1≤B≤50001 \le B \le 5000
  • 카드에 적힌 정수는 11 이상 10001000 이하이다.

출력

점수의 최댓값을 정수 하나로 한 줄에 출력한다.

예제2

  1. 예제 1

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

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