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

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

쪼개기와 합치기

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

요약
1xL 판을 1x1과 1x2 조각으로 채운 두 상태가 주어질 때, 분할과 병합으로 한 상태를 다른 상태로 바꾸는 최소 연산 횟수와 그 방법의 수를 구한다.
난이도

어려움10점 중 8점

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

문제

1×L1 \times L 격자가 1×11 \times 1 조각과 1×21 \times 2 조각으로 나누어져 있다.

두 가지 연산을 수행할 수 있다. 1×21 \times 2 조각 하나를 1×11 \times 1 조각 두 개로 쪼개는 연산과 이어 붙은 1×11 \times 1 조각 두 개를 1×21 \times 2 조각 하나로 합치는 연산이다.

격자의 초기 상태와 목표 상태가 주어졌을 때 수행해야 하는 연산의 최소 횟수와 그 횟수로 상태를 바꾸는 방법의 가짓수를 구한다.

입력

첫 번째 줄에 격자의 길이 LL이 주어진다 (1≤L≤30001 \le L \le 3000).

두 번째 줄에 초기 상태의 조각 수 nn이 주어진다 (1≤n≤L1 \le n \le L).

세 번째 줄에 nn개의 수 a1,a2,...,ana_1, a_2, ..., a_n이 주어진다. 왼쪽 조각부터 순서대로 적은 각 조각의 길이이며 각 수는 1 또는 2이다. nn개 수의 합은 LL이다.

네 번째 줄에 목표 상태의 조각 수 mm이 주어진다 (1≤m≤L1 \le m \le L).

다섯 번째 줄에 mm개의 수 b1,b2,...,bmb_1, b_2, ..., b_m이 세 번째 줄과 같은 방식으로 주어진다.

출력

첫 번째 줄에 필요한 연산의 최소 횟수와 그 횟수로 상태를 바꾸는 방법의 가짓수를 공백으로 구분해 출력한다. 가짓수가 커질 수 있으므로 10000000071000000007로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

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