동적 프로그래밍만을 사용하여 해결할 수있는 문제를 해결하려고했습니다. 다음은 문제입니다. 남자는 총 에너지가 H이고 거리 D를 커버 할 필요가 있습니다. 그는 최소 시간 동안 최대 에너지를 사용하여이 거리를 커버하려고합니다. 그는 5 가지 모드로 실행할 수 있습니다. 총 거리는 5 가지 모드 중 하나에 따라 각 km를 달리게하여 보상됩니다. '500 만 10 초', 6 '분 11 초」, 「7m 7 초', 8 '분 11 초」, 「9m의 11 초'다음과 같은 경우 greedy 알고리즘이 실패한 이유
- : 이들 5 가지 모드가시간 정렬 된 두 개의 배열을 사용하여 설명한다 필요한
에너지 : -11,9,8,7,6
그래서 내 욕심 솔루션 전략은 가장 낮은 소요 H/D
실행 다음 km 사용 모드의
- 계산 X = 바닥이다 시간과 에너지가 필요합니다 < 모드
집합 D = 필요한 = X
& 세트 H = H 에너지 D-1
오도 남은 거리까지 단계 1 0
- 답변 모두의 일부가 될 것이다진다 각 km 당 시간.
이 솔루션은 효과가 있지만 실제로는 실패합니다. DP를 사용하여 문제를 해결하는 방법을 알고 있지만 실패한 부분을 알고 싶습니다. 나는 많은 예를 시도했지만 그 느낌을 얻지 못했습니다. 나는 두 개의 배열 요소를 정확하게 상상할 수는 없지만 반드시 정렬 된 순서로 존재한다.
왜 이것이 효과가있을 것으로 기대하십니까? 알고리즘이 제대로 작동하는지 증명해보십시오. 로직 어딘가에 차이가있을 수 있습니다. – user2357112
글쎄, 당신 알고리즘을 위해서 이제는 루프가 필요하다. - 답은 (시간 : max (E) : E <= x)) * D. 각 단계에서 각각에 대해 고정 에너지를 가지기 때문에 동일한 모드를 선택할 것이다. km. 다음과 같이하는 방법 : 선택 모드 후에 DL 거리를 남겨 둡니다. HL - 모드 선택 후 남은 에너지. 각 단계에서 "모드 시간 모드 -> 최소 및 (모든 모드에서 최소 모드 에너지) * DL> = HL"을 수행하십시오. H = 12, D = 2, 첫 번째 단계가 H = 11 인 경우 솔루션을 사용하지 않아 종료되지 않도록 "DL> = HL"이 필요합니다 (모든 모드에서 최소 모드 에너지). –
아직 디버거를 사용해 보셨습니까? – MrSmith42