손상된 파일 복구
시간 제한2초메모리 제한512 MB
길이 접두사로 시작하는 블록들이 마지막 위치에서 정확히 끝나도록 수열의 원소를 지우면서, 지운 원소의 가능도 최댓값을 최소화한다.
문제
shake! 회사는 각 사용자의 데이터를 양의 정수로 표현한 뒤 데이터 조각으로 바꾸어 이어 붙여 파일에 저장한다. 하나의 데이터 조각은 맨 앞에 조각의 길이를 적고 그 뒤에 데이터를 이루는 수를 적어 만든다. 조각의 길이를 이라 하면 조각은 뒤에 개의 수가 오는 형태이며, 인 조각은 숫자 하나만으로 이루어진다.
3명의 사용자 데이터가 , , 이면 각 조각은 , , 이 되고, 이어 붙인 이 파일에 저장된다.
손상된 파일에는 원래 파일에 없었어야 할 수들이 추가되었을 수 있다. 각 위치의 수마다 그 수가 원래 파일에도 있었을 가능성을 나타내는 정수가 주어진다. 수를 적당히 지워 올바른 파일로 복구하되, 지운 수들의 가능성의 최댓값이 최소가 되도록 하여라.
입력
첫 줄에 손상된 파일을 이루는 수의 개수 이 주어진다. 을 만족한다.
다음 줄에 손상된 파일을 이루는 정수 개가 주어진다. 각 수는 이상 이하이다.
다음 줄에 각 수가 원래 파일에도 있었을 가능성을 나타내는 정수 개가 주어진다. 각 수는 이상 이하이다.
출력
지운 수들의 가능성의 최댓값을 최소화했을 때의 그 최댓값을 첫 줄에 출력한다.
수를 하나도 지우지 않아도 되면 을 출력한다.
힌트
남은 수열이 올바른 파일인지는 앞에서부터 확인한다. 맨 앞의 수를 이라 하면 그 뒤에 개의 수가 따라와야 하나의 조각이 되며, 다음 조각은 그 바로 뒤에서 시작한다. 마지막 조각까지 정확히 끝나면 올바른 파일이다.
지우는 위치를 고르면 남는 수들의 순서는 그대로 유지되며, 각 조각의 첫 수가 그 조각에 남게 되는 수의 개수와 일치해야 한다.