최대 'M' 제품을 판매하여 얻을 수 있는 최대 이익을 계산하는 작업이 주어집니다.
총 제품 수는 'N'이며 각 제품의 원가 및 판매 가격은 CP[] 및 SP[] 목록에 각각 표시됩니다.
입력
N=6, M=4
CP[]={1,9,5,8,2,11}
SP[]={1,15,10,16,5,20} 출력
28
설명 − 모든 제품을 판매하여 얻은 이익은 각각 0,6,5,8,3,9입니다.
따라서 4개의 제품만을 판매하여 최대의 이익을 내기 위해서는 가장 이익이 높은 제품, 즉 제품 번호 2,3,4, 6을 선택해야 합니다.
최대 이익=6+5+8+9=28
입력
N=3, M=2
CP[]={10,20,30}
SP[]={19,22,38} 출력
17
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
각 제품에서 얻은 이익을 저장하기 위해 int 유형과 크기 'N'의 배열 Profit[]을 만듭니다.
-
최종 최대 이익을 저장하기 위해 int 유형의 변수 Total을 만듭니다.
-
i=0에서 i
까지 루프 -
루프에 있는 동안 Profit[i] =Sp[i] – Cp[i]
를 설정합니다. -
호출 함수 sort(Profit, Profit + N, better
() ); Profit[] 배열을 내림차순으로 정렬합니다. -
다시 i=0에서 i
까지 루프 -
루프에서 if 조건을 설정하고 if(Profit[i]>0) 값이 양수인지 확인하고 그렇다면 total+=Profit[i];
를 설정합니다. -
총 반환;
예시
#include <bits/stdc++.h>
using namespace std;
//Function to find profit
int MaxProfit(int N, int M, int Cp[], int Sp[]){
int Profit[N];
int total = 0;
//Calculating profit from each product
for (int i = 0; i < N; i++)
Profit[i] = Sp[i] - Cp[i];
//Arranging profit array in descending order
sort(Profit, Profit + N, greater<int>());
//Adding the best M number of profits
for (int i = 0; i < M; i++){
if (Profit[i] > 0)
total += Profit[i];
else
break;
}
return total;
}
//Main function
int main(){
int MP;
int N=6,M=4;
int CP[] = { 1, 9, 5, 8, 2, 11 };
int SP[] = { 1, 15, 10, 16, 5, 20 };
MP = MaxProfit(N, M, CP, SP);
cout<<”Maximum Profit:”<<MP;
return 0;
} 출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
Maximum Profit: 28