이 주어진 시간에 사람들은 퍼즐이지만, 나는 내가 모르고 나는 고전적인 알고리즘이 될 수 있다고 생각 : 산의 하단에 n 개의 사람들이 있습니다일정 N 여행
을, 모두가 원하는 올라가고, 산을 내려 간다. 사람 i는이 산을 오를 시간이 필요하고, 내려갈 시간이 필요합니다.
그러나 동일한 시간에 at 사람이 오를 수 있습니다. 및입니다. atmost 1 명이 내려갈 수 있습니다. 산을 오르 내리는 가장 짧은 시간을 찾으십시오.
업데이트 1 :
잘 내가 몇 가지 예와 함께 노력하고 sorting
, or getting the fastest climbers first
또는 그 반대로 환원 아니다 것을 발견했다. 우리가 가능한 모든 해결책을 시도해야 할 수 있습니다 optimal
솔루션을 얻을 수 있다고 생각하므로 NP complete
것 같습니다.
내 초기 추측 : 내가 생각 솔루션은 욕심
(잘못된) : 일종의 N 오름차순으로 시작 시간에 의해 사람들. 그런 다음 jth person up
및 kth down
인 경우 u[j]<= d[k]
및 d[k] is minimum from all k persons on top of mountain
입니다. 나는 이것의 정확성을 증명할 수 없다.
다른 방법으로 접근하는 방법은 무엇입니까?
힌트로 충분합니다.
사람 A가 오름차순으로 5 분이 소요되고 사람 B와 C가 하강하기 위해 각각 2 분 및 3 분이 걸리면 A가 오를 수 있고 B와 C는 5 분 이내에 내려갈 수 있습니다.1 명이 넘는 사람이 올라가는 동안 한 명씩, 한 명 이상이 내려갈 수 있습니다), 아니면 허용되지 않습니까? 그것이 허용된다면, 문제는 그들이 적어도 하나씩 올라가도록하는 것, 특히 중요하지 않도록 명령하는 것 (적어도 내가 볼 수있는 한은)은 상당히 사소한 것처럼 보인다. – Dukeling
허용되지 않습니다. 제약 조건 : 'atmost 1은 올라갈 수 있고 atmost는 주어진 시간에 하강 할 수있다' –
동시에 오름차순 **과 ** 내림차순 1이있을 수 있지만 맞습니까? –