Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 계단 꼭대기에 오르기 위한 최소 비용을 찾는 프로그램은?

<시간/>

계단이라는 숫자 목록과 또 다른 값 k가 있다고 가정합니다. 우리는 현재 계단 0에 있으며 계단의 마지막 인덱스로 올라가고 싶습니다. 계단[i] 값은 인덱스에서 도달하는 비용을 나타내며 각 라운드에서 한 번에 1, 2, ... k 계단을 점프할 수 있습니다. 마지막 계단까지 오르기 위한 최소 비용을 찾아야 합니다.

따라서 입력이 계단식 =[4, 11, 11, 3, 2] k =3인 경우 계단식[4, 3, 2]

을 사용할 때 출력값은 9가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • q :=이중 종료 대기열 및 쌍(stairs[0], 0)을 삽입합니다.

  • 범위 1에서 계단 크기까지의 경우 다음을 수행하십시오.

    • 동안 i - q[0, 1]> k, 수행

      • q의 왼쪽에서 항목 제거

    • 비용 :=q[0, 0] + 계단[i]

    • q가 비어 있지 않고 curcost <=q의 마지막 항목의 첫 번째 값인 동안 수행

      • q에서 마지막 요소 삭제

    • q의 끝에 (curcost, i) 삽입

  • q의 마지막 항목의 첫 번째 값을 반환

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

from collections import dequeclass Solution:def solve(self, Stairs, k):q =deque([(stairs[0], 0)]) for i in range(1, len(stairs)):while i - q[0][1]> k:q.popleft() curcost =q[0][0] + Stairs[i] 동안 q 및 curcost <=q[-1][0]:q.pop() q .append((curcost, i)) return q[-1][0]ob =Solution()stairs =[4, 11, 11, 3, 2]k =3print(ob.solve(stairs, k)) 

입력

[4, 11, 11, 3, 2], 3

출력

9