C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

最大でM個の製品をC++で販売することにより、利益を最大化します。


与えられたタスクは、多くても「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、greater ());を呼び出します。 Profit[]配列をdescendingarrayに配置します。

  • 再び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

  1. C++のMazeIII

    空のスペースと壁のある迷路があり、その迷路の中にボールもあるとします。ボールは、上(u)、下(d)、左(l)、または右(r)の方向に転がることで空きスペースを通過できますが、壁にぶつかるまで転がり続けます。ボールが止まると、次の方向を選ぶことができます。その迷路にも1つの穴があります。ボールが穴に転がると、ボールは穴に落ちます。 したがって、ボールの位置、穴の位置、迷路がある場合、最短距離を移動することでボールがどのように穴に落ちるかを調べる必要があります。ここで、距離は、ボールがスタート(除外)からホール(含まれる)まで移動した空きスペースの数によって定義されます。 「u」、「d」、「l

  2. C++でのジョブスケジューリングの最大利益

    n個の異なるタスクがあり、すべてのタスクがstartTime[i]からendTime[i]まで実行されるようにスケジュールされていると仮定します。そのタスクでは、利益[i]を得ることができます。 startTime、endTime、および利益のリストがわかっているので、時間範囲が重複するサブセットに2つのタスクがないように、取得できる最大の利益を見つける必要があります。時間Xで終了するタスクを選択すると、時間Xで開始する別のタスクを開始できます。 したがって、入力がstartTime =[1,2,3,3]の場合、endTime=[3,4,5,6]利益=[500,100,400,700]