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