Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

모든 작업을 수행하는 데 필요한 최소 시간을 찾는 C++ 코드

<시간/>

n개의 요소가 있는 배열 A와 두 개의 다른 배열 k와 x가 있다고 가정합니다. i번째 작업은 완료하는 데 A[i] 시간이 걸립니다. 주어진 A는 감소하지 않는 방식으로 정렬됩니다. Amal은 최대 k개의 작업을 수행하고 A[i] 대신 x 시간 단위로 각 작업을 수행합니다. (x <모든 A[i]의 최소값). 우리는 Amal의 작업을 완료하는 데 필요한 최소 시간을 찾아야 합니다. Amal은 동시에 하나 이상의 작업을 수행할 수 없습니다.

따라서 입력이 A =[3, 6, 7, 10]과 같으면; k =2; x =2이면 출력은 13이 됩니다. 가장 좋은 옵션은 A[2] 및 A[3] 대신 각각 x =2 시간을 사용하여 세 번째 및 네 번째 작업을 수행하는 것이기 때문입니다. 그러면 답은 3 + 6 + 2 + 2 =13입니다.

단계

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

x := k * x
n := size of A
for initialize i := 0, when i < n - k, update (increase i by 1), do:
   t := A[i]
   x := x + t
return x

예시

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

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int k, int x){
   x = k * x;
   int n = A.size();
   for (int i = 0; i < n - k; i++){
      int t = A[i];
      x += t;
   }
   return x;
}
int main(){
   vector<int> A = { 3, 6, 7, 10 };
   int k = 2;
   int x = 2;
   cout << solve(A, k, x) << endl;
}

입력

{ 3, 6, 7, 10 }, 2, 2

출력

13