1937年。コストに応じた最大ポイント数
難易度: 中
トピック: 配列、動的プログラミング
m x n の整数行列ポイント (0 インデックス付き) が与えられます。 0 点から開始して、行列から取得できる点の数を最大化したいとします。
ポイントを獲得するには、各行で 1 つのセルを選択する必要があります。座標 (r, c) のセルを選択すると、スコアに [r][c] ポイントが追加されます。
ただし、前の行で選択したセルから離れすぎるセルを選択すると、ポイントが失われます。隣接する 2 つの行 r および r + 1 (0 1) および (r + 1, c) にあるセルを選択します。 2) はスコアから abs(c1 - c2) を 減算します。
達成できる最大ポイント数を返します
。abs(x) は次のように定義されます:
例 1:
例 2:
制約:
ヒント:
解決策:
ソリューションをいくつかのステップに分けることができます:
2D 配列 dp を使用します。ここで、dp[i][j] は、行 i と列 j のセルを選択することで達成できる最大点を表します。
コストを差し引く前の行がないため、dp の最初の行をポイントの最初の行と同じになるように初期化します。
後続の各行について、前の行からの切り替えコストを考慮して、各列の可能な最大ポイントを計算します。
行 i-1 から行 i への遷移を効率的に計算するには、左右の 2 つの補助配列を使用できます。
行 i の各列 j について:
結果は、dp 配列の最後の行の最大値になります。
このソリューションを PHP で実装してみましょう: 1937。コストに応じた最大ポイント数
<?php // Example usage: $points1 = [[1, 5], [2, 3], [4, 2]]; $points2 = [[2, 4, 3], [5, 6, 4]]; echo maxPoints($points1); // Output: 11 echo maxPoints($points2); // Output: 9 ?>
このアプローチの時間計算量は (O(m x n)) であり、制約を考慮すると効率的です。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がコストに応じた最大ポイント数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。