C++のカードから取得できる最大ポイント
複数のカードが一列に配置され、各カードにポイントが関連付けられており、これらのポイントがcardPointsと呼ばれる整数配列で指定されているとします。 1つのステップで、行の最初または最後から1枚のカードを取得できます。正確にk枚のカードを取る必要があります。最終的なスコアは、私たちが取ったカードのポイントの合計になります。したがって、整数配列cardPointsと整数kがある場合は、取得できる最大スコアを見つけます。
したがって、入力がcardPoints =[1,2,3,4,5,6,1]、k =3の場合、最初のステップの後、スコアは常に1になるため、出力は12になります。 、最初に右端のカードを選択すると、合計スコアが最大になります。最適な戦略は、右側の3枚のカードを取り、最終スコアを1 + 6 + 5=12にすることです。
これを解決するには、次の手順に従います-
-
2つの配列pre1とprev2を定義し、v
で初期化します。 -
ret:=0
-
n:=vのサイズ
-
初期化i:=1の場合、i
-
pre1 [i]:=pre1 [i] + pre1 [i-1]
-
-
初期化i:=n-2の場合、i> =0の場合、更新(iを1つ減らす)、実行-
-
pre2 [i]:=pre2 [i] + pre2 [i + 1]
-
-
k> =nの場合、-
-
pre1[n-1]を返す
-
-
i:=k-1
-
ret:=pre1 [i]
-
(iを1減らします)
-
j:=n-1
-
i> =0の場合、実行-
-
ret:=retの最大値と(pre1 [i] + pre2 [j])
-
iとjを1減らします
-
-
ret:=retとpre2の最大値[n-k]
-
retを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxScore(vector<int>& v, int k) { vector<int> pre1(v.begin(), v.end()); vector<int> pre2(v.begin(), v.end()); int ret = 0; int n = v.size(); for (int i = 1; i < n; i++) { pre1[i] += pre1[i - 1]; } for (int i = n - 2; i >= 0; i--) { pre2[i] += pre2[i + 1]; } if (k >= n) { return pre1[n - 1]; } int i = k - 1; ret = pre1[i]; i--; int j = n - 1; while (i >= 0) { ret = max(ret, pre1[i] + pre2[j]); i--; j--; } ret = max(ret, pre2[n - k]); return ret; } }; main(){ Solution ob; vector<int> v = {1,2,3,4,5,6,1}; cout << (ob.maxScore(v, 3)); }
入力
{1,2,3,4,5,6,1}
出力
12
-
C++でN*Nチェス盤に配置できる最大のビショップ
チェス盤のサイズを示す入力Nが与えられます。ここでのタスクは、Nの任意の値について、2人のビショップが互いに攻撃できないようにNXNチェス盤に配置できるビショップの数を見つけることです。例を挙げて理解しましょう。 入力 − n =2 出力 − N * Nチェス盤に配置できる最大のビショップ− 2(上記のように) 説明 −上に示したように、矛盾しない位置は司教が配置されている場所だけです。せいぜい2X2チェス盤のビショップ。 入力 − n =5 出力 − N * Nチェス盤に配置できる最大ビショップ:8(上記のように) 以下のプログラムで使用されているアプローチは次のとおりで
-
C++で下から右に光を転送できる最大ミラー
0と1のみを含む正方行列が与えられます。 0は空白または空の場所を表し、1は障害物を意味します。これらのミラーが下から右に光を転送できるように、空のセルに配置できるミラーをいくつか見つける必要があります。これは、ミラーがインデックス[i、j]に配置され、その特定の行(i)の右側のすべてのセルと、その特定の列の下部(j)のセルに障害物がない場合に可能です。 ミラーがA[i][j]にある場合、すべてのA [i+1からn][j]およびA[i][j + 1からn]は空、つまり0です。次の図に示すように。 入力 Arr[][] = {{0,0,1,0,0},{0,0,0,0,0},{0,0,0