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

3つのヒープから選択できる最大の石を見つけるためのC++コード


a、b、cの3つの数字があるとします。石の山は3つあり、それぞれa、b、cnumberの石があります。これらの操作を実行できるたびに-

  • 最初のヒープから1つの石を取り、2番目のヒープから2つの石を取ります(ヒープに必要な数の石がある場合)

  • 2番目のヒープから1つの石を取り、3番目のヒープから2つの石を取ります(ヒープに必要な数の石がある場合)

収集できる石の最大数を数える必要がありますか?

したがって、入力がa=3のような場合。 b =4; c =5の場合、出力は9になります。これは、2つの操作で2番目のヒープから2つの石、3番目のヒープから4つの石を取得でき、合計で6つの石があり、最初から1つ、2番目から2つを取得して、さらに3つの石を取得できるためです。

ステップ

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

return (minimum of b and floor of (c / 2) + minimum of a and (b - minimum of b and floor of (c / 2)) / 2) * 3

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

#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b, int c){
   return (min(b, c / 2) + min(a, (b - min(b, c / 2)) / 2)) * 3;
}
int main(){
   int a = 3;
   int b = 4;
   int c = 5;
   cout << solve(a, b, c) << endl;
}

入力

3, 4, 5

出力

9

  1. グラフから減らすことができるスコアの最大量を見つけるためのC++プログラム

    n個の頂点とm個のエッジを持つ重み付きの無向グラフがあるとします。グラフのスコアは、グラフ内のすべてのエッジの重みの加算として定義されます。エッジの重みは負の値になる可能性があり、それらを削除するとグラフのスコアが増加します。グラフを接続したまま、グラフからエッジを削除して、グラフのスコアを最小にする必要があります。減らすことができるスコアの最大量を見つける必要があります。 グラフは配列edgesで与えられ、各要素は{weight、{vertex1、vertex2}}の形式です。 したがって、入力がn =5、m =6、edges ={{2、{1、2}}、{2、{1、3}}、{1、{2、3}

  2. C++で3つのスタックの可能な最大合計に等しい合計を見つけます

    正の数のスタックが3つあるとします。最上位要素の削除が許可されているスタックの可能な最大合計を見つける必要があります。スタックは配列として表されます。配列の最初のインデックスは、スタックの最上位要素を表します。スタック要素が[3、10]、[4、5]、[2、1]のようであると仮定します。出力は0になります。合計は、すべてのスタックからすべての要素を削除した後にのみ等しくなります。 これを解決するために、私たちはこの考えに従います。アイデアは、各スタックの合計を比較し、それらが等しくない場合は、最大の合計を持つスタックの一番上の要素を削除することです。次の手順に従います- 個々のスタック内