ホームページ >バックエンド開発 >PHPチュートリアル >グリッドゲーム
2017年。グリッドゲーム
難易度: 中
トピック: 配列、行列、接頭辞の合計
サイズ 2 x n の 0 インデックス付き 2D 配列グリッドが与えられます。ここで、grid[r][c] は行列上の位置 (r, c) の点の数を表します。 2 台のロボットがこのマトリックスでゲームをプレイしています。
どちらのロボットも最初は (0, 0) から開始し、(1, n-1) に到達したいと考えています。各ロボットは、右方向 ((r, c) から (r, c 1)) または 下 ((r, c) から (r 1, c)) にのみ移動できます。
ゲームの開始時に、最初の ロボットは (0, 0) から (1, n-1) に移動し、そのパス上のセルからすべてのポイントを収集します。パス上を通過するすべてのセル (r, c) について、grid[r][c] は 0 に設定されます。その後、2 番目 ロボットは (0, 0) から (1, n-1) に移動します。 )、そのパス上のポイントを収集します。それらのパスは互いに交差する可能性があることに注意してください。
最初のロボットは、2 番目のロボットが収集するポイント数を最小限にしたいと考えています。対照的に、2 番目 ロボットは、収集するポイント数を最大化したいと考えています。両方のロボットが 最適でプレイした場合、2 番目のロボットによって収集されたポイント数を返します。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
次のアプローチを使用します:
プレフィックスの合計の計算: グリッドの両方の行のプレフィックスの合計を計算して、サブ配列の点の合計を効率的に計算します。
最適な動きのシミュレーション:
2 番目のロボットの最大ポイントを最小限に抑える:
このソリューションを PHP で実装してみましょう: 2017。グリッドゲーム
<?php function gridGame($grid) { ... ... ... /** * go to ./solution.php */ } // Example usage $grid1 = [[2, 5, 4], [1, 5, 1]]; $grid2 = [[3, 3, 1], [8, 5, 2]]; $grid3 = [[1, 3, 1, 15], [1, 3, 3, 1]]; echo gridGame($grid1) . "\n"; // Output: 4 echo gridGame($grid2) . "\n"; // Output: 4 echo gridGame($grid3) . "\n"; // Output: 7 ?>
プレフィックス合計の計算:
最初のロボットのパスのシミュレーション:
2 番目のロボットの最適点:
複雑さ:
これは予想される出力と一致します。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がグリッドゲームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。