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