이 ACM ICPC 문제에 대한 도움이 필요합니다. 내 현재 아이디어는 이것을 가장 짧은 경로 문제로 모델링하는 것입니다.이 문제는 문에서 설명합니다.
문제
를 제외한 다른 위치 N = 1000
의 1 차원 수선을 따라 위치한 핵 폐기물 용기가 있습니다 . 사람은 모든 쓰레기통을 수집해야합니다. 폐기물 컨테이너가 수집되지 않은 1 초마다 1 단위의 방사선을 방출합니다. 그 사람은 1 초에 시작하여 1 초마다 유닛 을 움직일 수 있으며 , 폐기물을 수집하는 데는 상당한 시간이 걸립니다. 모든 컨테이너를 수집하는 동안 방출되는 최소 방사량을 찾고 싶습니다.-500,000 to 500,000
x=0
x = 0
1
샘플 입력 :
4
에 위치한 컨테이너 [-12, -2, 3, 7]
.
이러한 용기를 수거하는 최선의 순서 [-2, 3, 7, -12]
는 최소 50
단위 방출입니다 . 설명 : 사람이 -2
2 초 안에 가면서 그 시간 동안 2 units
방사선이 방출됩니다. 그런 다음 배럴이 방사선 단위를 방출하도록 3
(거리 :)로 이동합니다 . 그는 그 배럴이 유닛 을 방출 한 곳 으로 가기까지 몇 초가 걸립니다 . 그는 그 배럴이 유닛 을 방출 한 곳 으로 가기 위해 몇 초가 걸립니다 . , 이것이 정답입니다.5
2 + 5 = 7
4
x = 7
2 + 5 + 4 = 11
19
x = -12
2 + 5 + 4 + 19 = 30
2 + 7 + 11 + 30 = 50
노트
확실한 O(N!)
해결책이 있습니다. 그러나 가장 가까운 것으로 이동하거나 가장 가까운 클러스터로 이동하는 것과 같은 욕심 많은 방법을 살펴 보았지만 작동하지 않았습니다.
나는이 문제에 대해 오랫동안 생각해 왔으며 그래프 검색 문제로 모델링했습니다.
0
기준 위치로 삽입 합니다 (초기 상태 임).- 그런 다음 위치를 최소에서 최대로 정렬합니다.
- 우리는 다음이 BFS / PFS, 이렇게
state
구성을- 두 정수
l
와r
우리가 이미 방문한 것을 정렬 된 위치에 배열의 연속 범위를 나타냅니다 loc
우리가 범위의 왼쪽 또는 오른쪽 끝점에 있는지 알려주 는 정수time
경과 시간을 알려주 는 정수- 지금까지 총 비용을 알려주는 정수 '비용'(방문한 노드 기준)
- 두 정수
- 각 상태에서 [l-1, r] 및 [l, r + 1]로 이동하여 그에 따라 다른 3 개의 정수를 조정할 수 있습니다.
- 최종 상태는 [0, N]이며 두 종료 위치를 모두 확인합니다.
그러나 [L, R, loc]
상태를 고유하게 정의하는 것은 아니며 각 L, R, loc, and time
상태를 최소화하면서 저장해야합니다 cost
. 이것은 지수 알고리즘으로 이어지며, 여전히 좋은 결과를 얻기에는 너무 느립니다.
누구든지 내 아이디어를 넓히거나 올바른 방향으로 나아가도록 도울 수 있습니까?
편집 : 아마도 이것이 동적 프로그래밍 최적화 문제로 모델링 될 수 있습니까? 그것에 대해 생각하면 그래프 검색 솔루션과 동일한 문제가 있습니다. 전류 cost
가 낮다는 것이 그 하위 문제에 대한 최적의 대답이라는 것을 의미하지는 않습니다 time
.
욕심이 작동하지 않습니다 : 나는 특정 장소로 이동하는 비용을 추정하는 탐욕스러운 선택 알고리즘을 가지고 있습니다 (예를 들어 우리가 오른쪽으로 이동하면 왼쪽 배럴까지의 거리를 두 배로 늘림).
휴리스틱으로 우선 순위 우선 검색을 수행 할 수 있습니까? 휴리스틱은 현재 여행 비용과 경과 시간을 결합 할 수 있습니다.