BOJ 27480 Even Harder
BOJ 27480 Even Harder
문제 내용
음이 아닌 정수로 이루어진 배열 이 주어집니다. 다음의 과정을 거쳐 1번 위치에서 번 위치로 이동하는 방법이 유일하도록 배열의 몇몇 값을 0으로 바꾸고자 할 때, 0으로 바꿔야 하는 수의 최소 개수를 구하세요. 두 가지 이동 방법에서 한 쪽에서 거쳐간 위치를 다른 쪽에서 거쳐가지 않는다면, 두 이동 방법을 서로 다르다고 합니다.
- 번 위치에서는 이상 이하의 위치로 이동할 수 있습니다.
- 가 0이면 더 이상 이동할 수 없습니다.
입력
첫 줄에는 테스트 케이스의 개수 가 주어집니다. ()
각 테스트 케이스에 대해, 첫 줄에는 배열의 길이 이 주어지고, 두 번째 줄에는 이 주어집니다. (, )
모든 입력에서 1번 위치에서 번 위치로 이동하는 방법은 하나 이상 존재하며, 하나의 입력 파일에서 모든 테스트 케이스의 의 합은 이하입니다.
출력
각 테스트 케이스에 대해 문제의 정답을 한 줄에 출력합니다.
문제 풀이
스포일러
DP를 다음과 같이 정의합니다.
- : 번째에서 시작하여 번째에 도달하는 유일한 경로에서 다음에 를 밟아야 할 때 중에서 0으로 바꾼 수의 최소 개수; 그러한 방법이 존재하지 않으면
그러면 다음과 같은 식을 만들 수 있습니다. 편의상 에서 도달 가능한 최대 지점 를 라고 합시다. 는 Iverson bracket으로, 조건 가 참이면 1, 아니면 0입니다.
- 이라면, . 에서 다음으로 밟는 위치가 이하이면 에서 바로 그 지점을 밟는 경로가 생기므로, 그 위치는 보다는 커야 합니다.
- 이라면, . 에서 로 갈 수 있다는 것은 로도 갈 수 있다는 것으로, 에서 로 갈 수 있으면 추가 경로가 생기므로 을 0으로 만들어서 끊어줘야 합니다.
- 이라면, . 먼저 에서 으로 가는 경로는 반드시 끊어야 하고, 이제 에서 를 거쳐 으로 갈 수는 없으므로 에서 바로 으로 갈 수 있는지만 체크해서 끊어주면 됩니다.
- 이를 일반화하면 다음의 식을 얻습니다.
- 이는 의 누적 min과 의 누적합을 이용하여 구할 수 있습니다.
- 예외적으로 다음 목적지가 인 경우는 더 이상 갈 곳이 없으므로 으로 구할 수 있습니다.
Last updated on