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

C++で異なる長さのロッドを切断することによって最大の利益を見つけるためのプログラム


長さnのロッドがあるとします。サイズごとに異なるサイズと価格を含むリストもあります。ロッドを切って市場で売って最高価格を見つけなければなりません。さまざまな位置でカットし、ロッドをカットした後の価格を比較することで、最良の価格を得るには。

したがって、入力がprices =[1、5、8、9、10、17、17、20]、n =8のようである場合、ロッドを長さ2および6に切断することにより、出力は22になります。利益は5+17=22です。

これを解決するには、次の手順に従います-

  • サイズの配列利益を定義します:n+1。

  • 利益[0]:=0

  • 初期化i:=1の場合、i <=nの場合、更新(iを1増やします)、実行-

    • maxProfit:=負の無限大

    • 初期化j:=0の場合、j

      • maxProfit:=maxProfitと価格の最大値[j]+利益[i− j − 1]

    • 利益[i]:=maxProfit

  • maxProfitを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
int max(int a, int b) {
   return (a > b)? a : b;
}
int rodCutting(int price[], int n) {
   int profit[n+1];
   profit[0] = 0;
   int maxProfit;
   for (int i = 1; i<=n; i++) {
      maxProfit = INT_MIN;
      for (int j = 0; j < i; j++)
      maxProfit = max(maxProfit, price[j] + profit[i-j-1]);
      profit[i] = maxProfit;
   }
   return maxProfit;
}
int main() {
   int priceList[] = {1, 5, 8, 9, 10, 17, 17, 20};
   int rodLength = 8;
   cout << rodCutting(priceList, rodLength);
}

入力

{1, 5, 8, 9, 10, 17, 17, 20}, 8

出力

22

  1. 小麦の販売から達成できる最大の利益を見つけるためのC++プログラム

    m本の道路に接続されている都市がn個あるとします。道路は一方向であり、道路は出発地から目的地までしか行くことができず、その逆はできません。道路は、{source、destination}の形式で配列「roads」で指定されます。現在、都市では、小麦はさまざまな価格で販売されています。都市全体の小麦の価格は、配列「価格」で示されます。ここで、i番目の値はi番目の都市の小麦の価格です。現在、旅行者はどの都市からでも小麦を購入でき、(許可されている場合は)どの都市にも到達して販売することができます。旅行者が小麦を取引することで達成できる最大の利益を見つけなければなりません。 したがって、入力がn

  2. グラフ内のスーパー頂点を見つけるためのC++プログラム

    n個の頂点を持つグラフが与えられたとします。頂点には1からnの番号が付けられ、配列edgesで指定されたエッジによって接続されます。各頂点には、配列valuesで指定された1からnまでの数値内のx値があります。ここで、グラフからスーパー頂点を見つける必要があります。頂点1からiへの最短経路にi番目の頂点と同じ「x」値を持つ頂点がない場合、頂点iは「スーパー頂点」と呼ばれます。この基準を満たすすべての頂点を印刷します。 したがって、入力がn =5のようである場合、値={1、2、2、1、3}、エッジ={{1、2}、{2、3}、{2、3}、{2、4 }、{4、5}}の場合、出力は1 345に