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

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

Gross LCS

시간 제한10초메모리 제한16 MB

요약
두 수열 A와 B가 주어질 때, 모든 정수 x에 대해 A의 각 원소에 x를 더한 수열과 B의 최장 공통 부분 수열 길이를 구하고 그 합을 계산합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 해시맵, 정렬
정답자
아직 제출이 없습니다

문제

이 문제의 메모리 제한은 비정상적으로 낮다.

LCS⁡(A,B)\operatorname{LCS}(A, B)는 정수 수열 A=⟨a_1,a_2,…,a_n⟩A = \langle a\_1, a\_2, \ldots, a\_n \rangle와 B=⟨b_1,b_2,…,b_m⟩B = \langle b\_1, b\_2, \ldots, b\_m \rangle의 최장 공통 부분 수열 길이를 뜻한다.

정수 xx에 대해 A+xA + x는 AA의 모든 원소에 xx를 더한 수열 ⟨a_1+x,a_2+x,…,a_n+x⟩\langle a\_1 + x, a\_2 + x, \ldots, a\_n + x \rangle이다.

정수 수열 AA와 BB가 주어진다. −10100-10^{100}부터 1010010^{100}까지 모든 정수 xx에 대해 LCS⁡(A+x,B)\operatorname{LCS}(A + x, B)를 구하고, 그 값을 모두 더하라.

입력

첫 줄에 두 정수 nn과 mm이 주어진다 (1≤n,m≤40001 \le n, m \le 4000).

둘째 줄에는 nn개의 정수 a_1,…,a_na\_1, \ldots, a\_n이 주어진다 (−108≤a_i≤108-10^8 \le a\_i \le 10^8).

셋째 줄에는 mm개의 정수 b_1,…,b_mb\_1, \ldots, b\_m이 주어진다 (−108≤b_i≤108-10^8 \le b\_i \le 10^8).

출력

−10100-10^{100}부터 1010010^{100}까지 모든 정수 xx에 대한 LCS⁡(A+x,B)\operatorname{LCS}(A + x, B)의 합을 출력한다.

힌트

정수 수열 PP가 QQ의 부분 수열이라는 것은 QQ에서 원소 몇 개(0개 또는 전부도 가능)를 지워서 PP를 얻을 수 있다는 뜻이다. 두 수열의 최장 공통 부분 수열은 두 수열 모두의 부분 수열이면서 길이가 가장 긴 수열 CC다.

예제1

  1. 예제 1

    입력
    3 4
    5 5 8
    3 6 3 6
    
    예상 출력
    6