CH300 작업 스케줄링 문제 솔루션 (1 개) 보고서

주제 포털

[제목] 효과

$ $ N-작업을 특정 순서로 처리 할 수있다,는 I $ $ $ T_i 작업은 $을 완료하는 데 시간이 걸립니다. 각 일괄 처리 작업을 시작하기 전에 컴퓨터를 시작하는 데 시간이 $의 S $으로 보내고, 처리에 대한 몇 가지 배치로 나눌 수 있습니다. 시간 $ 0 $의 시작 부분에서 $ i는 수수료의 첫 번째 작업을 완료하는 데 $ $ C_I $가 완료 시간 $ 곱입니다 (각 작업 완료 시간에 대한 작업 완료 시간의 수를 마지막으로 $ 작업을 경우 $) $, 최소 총 비용을 찾을 수 있습니다.

[분석] 아이디어

우선 간단하게 생각할 제공 $의 F는 $ J $ 배치 최소 전체 비용에 $가 $ I $ 태스크, 전사 식 $의 F [I] [J] = 분 \ {F의 [전면 완료 [I] [J]이다 K] [J-1] + (S의 *의 J + \ sum_ {X = 1} ^ {I} T_x) * \ sum_ {X = K + 1} ^ {I} C_x \} (0 \ 르 K <I) $

분명히 시간 복잡도는 $ O (N ^ 3) $이며, 이것은 우리가 최적화하는 방법을 고려, 이상 확실하지 않다.

사실 우리는 컴퓨터를 다시 시작할 때마다이 시간의 상당 동시에 플러스 $ S의 $에서 모든 후속 작업을 완료하는 데, 그것은 우리가 앞으로 몇 개의 그룹으로 구분 된 작업을 알 필요가 없습니다 말을하는 것입니다.

제공자 $의 F는 [I]는 $ 전에 완료 나타내고 $ I $의 $ 태스크 최소 전체 비용 $은 $ ㅂ 전사 식 (나머지 태스크 걸리는 여분 $ S $으로 시간 $ 비용 포함 $) [I] = F 분 \ {[J] + \ sum_ {X = 1} ^ {I} T_x * \ sum_ {X = J + 1} ^ {I} C_x + S * \ sum_ {X = J + 1} ^ { N} C_x \} (0 \ 르 J <I) $

[] 코드 구현

1 #INCLUDE <cstdio>
 2 #INCLUDE <iostream>
 3 #INCLUDE <CString을>
 4 #INCLUDE <알고리즘>
 5 #INCLUDE <cmath>
 6 #INCLUDE <큐>
 7  #DEFINE의 g () getchar가 ()
 8  #DEFINE의 RG 레지스터
 9  #DEFINE의 이동 (I는은 b)에 대한 (RG의 INT 난 =; 나는 <= B를 단계; 내가 ++)
 10  #DEFINE 백 (I, a가, b) (RG의 인터넷 용 난 =; I> = B; 난 -)
 11  #DEFINE의 DB 이중
 12  #DEFINE이 줄게 긴 길이
 13  #DEFINE IL 인라인
 14  #DEFINE PF printf의
 15  #DEFINEMEM (a, b)가 memset (A, B를 sizeof (a))
 (16)  를 사용  스페이스 성병;
17  LL의 FR () {
 18      = w LL 0 , Q = 1 ;
19       CH = g ();
20      동안 (CH2 < ' 0 ' || CH> ' 9 ' ) {
 21 일          경우 (CH2 == ' - ' ) Q = - 1 ;
22          CH = g ();
23      }
 24      동안 (CH2> = ' 0 ' && CH <=에서 ' 9' ) (w = w << 1 ) + (w << 3 ) + CH- ' 0 ' , CH = g ();
25       * w의 Q;
26  }
 27  CONST의  INT에서 N = 5002 ;
28  INT의 N, S;
29  LL의 F [N], 세인트 [N], SC [N];
30  INT 의 main () {
 31      // freopen을 ( "", "R", 표준 입력);
32      // freopen을 ( "", ""w, 표준 출력); 
33      N의 FR = ()의 S = FR ();
34      이동 (I, 1 , n)의 일 [I] = 세인트 [I- 1 ] + FR (), SC [I]는 SC = [I- 1+ FR ();
35      MEM (F, 0x3F입니다 ) [F 0 ] = 0 ;
36      이동 (I, 1 , n)은 이동 (j, 0 , I- 1 )
 37          F [I] = 분 ([I], F [J] 일 F + [I] * (SC [I] -sc [ J]) + S *의 (SC [N] - (SC) [J]));
38      PF ( " % LLD \ 없음 ' , F [N]);
39      반환  0 ;
40 }
코드는 여기 찌를

추천

출처www.cnblogs.com/THWZF/p/11716518.html