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

Python에서 주어진 제약 조건으로 모든 작업을 완료하는 최소 시간 찾기

<시간/>

다른 시간 요구 사항을 가진 일련의 작업이 있고 작업을 할당하는 k명의 다른 사람이 있으며 양수인이 작업의 한 단위를 수행하는 데 걸리는 시간도 있다고 가정합니다. 다음과 같은 제약 조건으로 모든 작업을 완료하는 데 필요한 최소 시간을 찾아야 합니다.

  • 양수인에게는 연속 작업만 할당할 수 있습니다.

  • 두 명의 담당자가 단일 작업을 공유하거나 수행할 수 없습니다.

따라서 입력이 k =4, t =5, job ={12, 6, 9, 15, 5, 9}인 경우 [12],[6 , 9],[15] 및 [5, 9]

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

  • is_valid() 함수를 정의합니다. 시간이 걸립니다. K, 작업

  • n :=작업 크기

  • count :=1, curr_time :=0, i :=0

  • 내가

    • curr_time + job[i]> time이면

      • curr_time :=0

      • 개수 :=개수 + 1

    • 그렇지 않으면

      • curr_time :=curr_time + 작업[i]

      • 나는 :=나는 + 1

  • count <=K

    일 때 true를 반환합니다.
  • 기본 방법에서 다음을 수행합니다. <

  • n :=작업 크기

  • 끝 :=0, 시작 :=0

  • 0에서 n 사이의 i에 대해 수행

    • 끝 :=끝 + 작업[i]

  • res :=끝

  • job_max :=작업의 최대값

  • 동안 시작 <=종료, 수행

    • mid :=((시작 + 끝) / 2) 정수 부분 사용

    • mid>=job_max 및 is_valid(mid, K, job)가 true인 경우

      • res :=최소 res, mid

      • 끝 :=중간 - 1

    • 그렇지 않으면

      • 시작 :=중간 + 1

  • 반환 res * T

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def is_valid(time, K, job):n =len(job) count =1 curr_time =0 i =0 while i  time:curr_time =0 count +=1 else:curr_time +=job[i] i +=1 return count <=Kdef get_minimum_time(K, T, job):n =len(job) end =0 begin =0 for i in range(n):end +=job[i] res =end job_max =max(job) while begin <=end:mid =int((begin + end) / 2) if mid>=job_max 및 is_valid(mid, K, job):res =min( res, mid) end =mid - 1 else:begin =mid + 1 return res * Tjob =[12, 6, 9, 15, 5, 9]k =4T =5print(get_minimum_time(k, T, job)) 

입력

4, 5, [12, 6, 9, 15, 5, 9]

출력

75