главная Π½ΠΎΠ²ΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

БСгодня Π² нашСй Π·Π°Π΄Π°Ρ‡Π΅ 2017. Grid Game трСбуСтся Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Π² ΠΈΠ³Ρ€Π΅ с 2 участниками. И большая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΡΡ‚ΡŒ – "Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Π½Π° салфСткС".

πŸ–οΈ УсловиС Π·Π°Π΄Π°Ρ‡ΠΈ

Π”Π°Π½ΠΎ: Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив grid Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2 x n, Π³Π΄Π΅ grid[r][c] прСдставляСт количСство ΠΎΡ‡ΠΊΠΎΠ² Π² ячСйкС (r, c).

ЦСль ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°: ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ максимальноС количСство ΠΎΡ‡ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ смоТСт ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€ΠΎΠ±ΠΎΡ‚.

πŸ’‘ ИдСя

Π›Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ стратСгии Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ:

  1. ΠŸΡ€Π°Π²ΠΎ β†’ Π’Π½ΠΈΠ·: Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠΉΡ‚ΠΈ вСсь Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ряд, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ Π²Π½ΠΈΠ· Π½Π° послСднСй ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅.
  2. Π’Π½ΠΈΠ· β†’ ΠŸΡ€Π°Π²ΠΎ: Π‘ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ Π²Π½ΠΈΠ· сразу, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²ΠΏΡ€Π°Π²ΠΎ вдоль Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ряда.

А Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ максимальноС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ количСство ΠΎΡ‡ΠΊΠΎΠ² для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π° ΠΈΠ· Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

Π­Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π½Π° Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ минимакса.

πŸ” Π”Π΅Ρ‚Π°Π»ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°

  1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ:
    • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ² Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ряду (top_score_remained).
    • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ bot_score_collected Π² 0.
  2. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ: Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСсса спуска ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π° Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅
    • ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΎΡ‡ΠΊΠΈ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ряду ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‡ΠΊΠΈ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ряду, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‡Π΅ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°.
    • Π Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… стратСгий.
    • ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… максимумов для всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ².
  3. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:
    • Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‡ΠΊΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΠΎΠ΄ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°.

⏱️ Асимптотика

πŸ’» Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

impl Solution {
    pub fn grid_game(grid: Vec<Vec<i32>>) -> i64 {
        let n = grid[0].len();

        // Calculate the total points in the top row initially
        let mut top_score_remained: i64 = grid[0].iter().map(|&x| x as i64).sum();
        let mut bot_score_collected: i64 = 0;

        // Variable to track the optimal score for the second robot
        let mut opt_second_score: i64 = top_score_remained;

        // Iterate through each column
        for j in 0..n {
            // Reduce the top row points as the first robot moves
            top_score_remained -= grid[0][j] as i64;

            // Compute the maximum points the second robot can collect
            opt_second_score = opt_second_score.min(
                bot_score_collected.max(top_score_remained),
            );

            // Update the bottom row points collected by the first robot
            bot_score_collected += grid[1][j] as i64;
        }

        opt_second_score
    }
}

Tags:Β  #rust #algorithms #games #strategy