Найти Ρ‚Π΅ΠΌΡƒ
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

πŸ… РСшаСм 5 ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° Python

ОглавлСниС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску для Π²Ρ‹Π±ΠΎΡ€Π° симпатичных ΡƒΠ·ΠΎΡ€ΠΎΠ², Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈΠ³Ρ€Ρ‹, подсчитываСм Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², ΠΈ выясняСм, Π·Π° сколько сСкунд ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ эскалатору.

Π—Π°Π΄Π°Ρ‡Π° 1: Π“Π°Π·ΠΎΠ½

ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚Ρ‚Π΅Π΄ΠΆΠ΅ΠΌ Ивана Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡Π° Π΅ΡΡ‚ΡŒ Π³Π°Π·ΠΎΠ½ – Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ растСт ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΡ‡ΠΎΠΊ Ρ‚Ρ€Π°Π²Ρ‹. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΊΡƒΠΏΠΈΠ» Π½ΠΎΠ²ΡƒΡŽ газонокосилку, ΠΈ Π² качСствС тСст-Π΄Ρ€Π°ΠΉΠ²Π° подстриг ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ участок Π³Π°Π·ΠΎΠ½Π°. Π‘Ρ‚ΠΎΡ€ΠΎΠ½Ρ‹ этого участка ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ осям ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π° Π΄Π²Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ располоТСны Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… (x1, y1) ΠΈ (x2, y2). ΠŸΡ€ΠΈ этом ΠΏΡƒΡ‡ΠΊΠΈ Ρ‚Ρ€Π°Π²Ρ‹, находящиСся Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ этого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ подстриТСны. ПослС стриТки Π²Π»Π°Π΄Π΅Π»Π΅Ρ† установил Π½Π° Π³Π°Π·ΠΎΠ½Π΅ ΠΏΠΎΠ»ΠΈΠ²Π°Π»ΡŒΠ½ΡƒΡŽ установку. Она находится Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x3, y3) ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ радиус дСйствия r. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, установка Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ»ΠΈΠ²Π°Ρ‚ΡŒ всС ΠΏΡƒΡ‡ΠΊΠΈ, расстояниС, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ (x3, y3) Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ r. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π˜Π²Π°Π½Ρƒ Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сколько ΠΏΡƒΡ‡ΠΊΠΎΠ² Ρ‚Ρ€Π°Π²Ρ‹ оказалось ΠΈ подстриТСно, ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΎ.

   ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ – подстриТСнныС ΠΈ ΠΏΠΎΠ»ΠΈΡ‚Ρ‹Π΅ ΠΏΡƒΡ‡ΠΊΠΈ Ρ‚Ρ€Π°Π²Ρ‹
ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ – подстриТСнныС ΠΈ ΠΏΠΎΠ»ΠΈΡ‚Ρ‹Π΅ ΠΏΡƒΡ‡ΠΊΠΈ Ρ‚Ρ€Π°Π²Ρ‹

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

  • Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС содСрТатся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†Π΅Π»Ρ‹Ρ… числа x1, x2, y1, y2 (βˆ’100000 ≀ Ρ…1 < Ρ…2 ≀ 100000, βˆ’100000 ≀ y1 < y2 ≀ 100000).
  • Вторая строка содСрТит Ρ‚Ρ€ΠΈ Ρ†Π΅Π»Ρ‹Ρ… числа x3, y3, r (βˆ’100000 ≀ x3, y3 ≀ 100000, 1 ≀ r ≀ 100000.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π¦Π΅Π»ΠΎΠ΅ число (количСство подстриТСнных ΠΈ ΠΏΠΎΠ»ΠΈΡ‚Ρ‹Ρ… ΠΏΡƒΡ‡ΠΊΠΎΠ² Ρ‚Ρ€Π°Π²Ρ‹).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°:

Π’Ρ‹Π²ΠΎΠ΄:

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»

🧩🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

РСшСниС

Π‘Π½Π°Ρ‡Π°Π»Π° прямыС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… располоТСны ΠΏΡƒΡ‡ΠΊΠΈ Ρ‚Ρ€Π°Π²Ρ‹, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² зависимости ΠΎΡ‚ ΠΈΡ… полоТСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ осСй абсцисс ΠΈ ΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π—Π°Ρ‚Π΅ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ пСрСсСчСниС этих прямых с ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ βˆ’ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΡ€ΠΎΡˆΠ°Π΅Ρ‚ поливальная установка. Если Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ пСрСсСчСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство постриТСнных ΠΈ ΠΏΠΎΠ»ΠΈΡ‚Ρ‹Ρ… ΠΏΡƒΡ‡ΠΊΠΎΠ² Ρ‚Ρ€Π°Π²Ρ‹ для Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ βˆ’ нахоТдСния Ρ†Π΅Π»ΠΎΠΉ части числа. ПослС этого всС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ числа ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ Π½Π° Π·Π°Π΄Π°Ρ‡Ρƒ.

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π²Π½ΠΎ O(r), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ радиусу окруТности (области ΠΏΠΎΠ»ΠΈΠ²Π°) ΠΈ Π½Π΅ зависит ΠΎΡ‚ количСства ΠΏΡƒΡ‡ΠΊΠΎΠ² Ρ‚Ρ€Π°Π²Ρ‹ ΠΈΠ»ΠΈ прямых.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ – ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ:

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – быстрый:

Π—Π°Π΄Π°Ρ‡Π° 2: ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π°Ρ стратСгия

Π”Π²Π° ΠΏΠΈΡ€Π°Ρ‚Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ: Π²Ρ‹Π»ΠΎΠΆΠΈΠ»ΠΈ Π½Π° стол Π² ряд всС пиастры, ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ…ΠΎΠ΄Π° ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ 1 ΠΌΠΎΠ½Π΅Ρ‚Ρƒ Π»ΠΈΠ±ΠΎ справа, Π»ΠΈΠ±ΠΎ слСва. Π˜Π³Ρ€Π° заканчиваСтся, ΠΊΠΎΠ³Π΄Π° всС ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹.

Оба ΠΏΠΈΡ€Π°Ρ‚Π° стрСмятся Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ, ΠΈ поэтому ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π² соотвСтствии с ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ стратСгиСй. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΆΠ°Π΄Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ стратСгиСй выглядит Ρ‚Π°ΠΊ:

-2

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для опрСдСлСния побСдитСля ΠΈ суммы Π΅Π³ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° участника ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, Π° ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½ΠΎΠ΅ достоинство.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°:

РСшСниС

Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ двумя способами.

Бпособ 1 – рСкурсия с ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

Π’ΠΎ врСмя Ρ…ΠΎΠ΄Π° Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΎΠΏΡ†ΠΈΠΈ:

1. Π’Π·ΡΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ Ci слСва – Ρ‚ΠΎΠ³Π΄Π° ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ Ci+1 ΠΈΠ»ΠΈ Cj. ΠŸΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠΊ стрСмится ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ° с минимальной ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ Ci + min(function(i+2, j), function(i+1, j-1) ) Π³Π΄Π΅ [i+2,j] – Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠΎΠ½Π΅Ρ‚, доступных ΠΈΠ³Ρ€ΠΎΠΊΡƒ, Ссли ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ Ci+1, a[i+1,j-1] – ΠΌΠΎΠ½Π΅Ρ‚Ρ‹, доступныС ΠΈΠ³Ρ€ΠΎΠΊΡƒ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ справа, Cj.

   Π’Ρ‹Π±ΠΎΡ€ слСва
Π’Ρ‹Π±ΠΎΡ€ слСва

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

β¬‡οΈπŸβ¬†οΈ ΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ vs bottom-up: ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ динамичСского программирования Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС умствСнных усилий?

2. Π’Π·ΡΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ Cj справа – Π² этом случаС ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Π»ΠΈΠ±ΠΎ Ci слСва, Π»ΠΈΠ±ΠΎ Cj-1 справа. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ° с минимальной ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΡŽ, ΠΈΠ³Ρ€ΠΎΠΊ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Cj + min(function(i+1, j-1), function(i, j-2) ), Π³Π΄Π΅ [i,j-2] – ΠΌΠΎΠ½Π΅Ρ‚Ρ‹, доступныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ссли ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ справа, Π° [i+1,j-1] – ΠΌΠΎΠ½Π΅Ρ‚Ρ‹, доступныС ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Ci.

   Π’Ρ‹Π±ΠΎΡ€ справа
Π’Ρ‹Π±ΠΎΡ€ справа

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рСкурсивный случай выглядит Ρ‚Π°ΠΊ:

Π“Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ случаи:

Код Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с рСкурсиСй:

Бпособ 2 – динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Алгоритм Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° n x n.

Π’ Ρ†ΠΈΠΊΠ»Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ элСмСнты i ΠΈ j Π½Π° всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… позициях. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ количСством Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов – дистанциСй. Π’ зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² сравнСния присваиваСм значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ x, y, z:

  • Ссли i+2 <=j, Ρ‚ΠΎ x Ρ€Π°Π²Π½ΠΎ matrix[i+2][j], Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС x = 0;
  • Ссли i+1 <=j-1, Ρ‚ΠΎ y = matrix[i+1][j-1] , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС y = 0;
  • Ссли i <= j-2, Ρ‚ΠΎ z = matrix[i][j-2] , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС z = 0.

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ matrix[i][j] максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π²ΡƒΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ – coins[i] + min(x, y) ΠΈ coins[j] + min(y, z). ΠžΡ‚Π²Π΅Ρ‚ – Π² matrix[0][n – 1].

Код Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с динамичСским ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

🐍 5 Π·Π°Π΄Π°Ρ‡ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ собСсСдованию ΠΏΠΎ Python

Π—Π°Π΄Π°Ρ‡Π° 3. Эскалатор

Бтанция ΠΌΠ΅Ρ‚Ρ€ΠΎΠΏΠΎΠ»ΠΈΡ‚Π΅Π½Π° оснащСна эскалатором. ΠŸΡƒΡΡ‚ΡŒ N Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π±Π΅Π³ΡƒΡ‚ Π²Π½ΠΈΠ· ΠΏΠΎ эскалатору, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ i-ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π³Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ Π·Π° ti сСкунд. Π’Π΅Ρ…Π½ΠΈΠΊΠ° бСзопасности Π½Π° эскалаторС Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Β«ΠΎΠ±Π³ΠΎΠ½Ρ‹Β», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ссли Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ A Π² процСссС Π±Π΅Π³Π° Π΄ΠΎΠ³Π½Π°Π» Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° B, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π΅ΠΆΠΈΡ‚ с Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ Π΄Π°Π»Π΅Π΅, Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° эскалатора, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ A Π±Π΅ΠΆΠΈΡ‚ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° B. Однако ступСни эскалатора Ρ‚Π°ΠΊΠΎΠ²Ρ‹, Ρ‡Ρ‚ΠΎ Π½Π° Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ нСсколько Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°ΠΌ станции Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ свой Π±Π΅Π³ ΠΏΠΎ эскалатору ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π΅Π³ΡƒΡ‰ΠΈΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ число N (1 ≀ N ≀ 105). Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строках пСрСчислСны ΠΏΠ°Ρ€Ρ‹ чисСл ti, wi(1 ≀ ti, wi ≀ 106) – врСмя ΠΏΡ€ΠΎΠ±Π΅Π³Π° ΠΎΠ΄Π½ΠΎΠΉ ступСни ΠΈ количСство ступСнСй Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° эскалатора для i-Ρ‚ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

ВрСмя Π² сСкундах, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ i-ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ сойдСт с эскалатора.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°:

Π’Ρ‹Π²ΠΎΠ΄:

РСшСниС

  • Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ массив order ΠΈΠ· индСксов [0..n-1] для хранСния порядка отсортированных людСй.
  • Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ сортировку qs, которая сортируСт людСй ΠΏΠΎ скорости, записывая индСксы отсортированных людСй Π² массив order.
  • ПослС сортировки для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° вычисляСм максимум ΠΈΠ· Π΅Π³ΠΎ собствСнного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° (учитывая, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π³ΠΎΠ½ΡΡ‚ΡŒ нСльзя).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ врСмя для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ» эскалатора:

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

πŸπŸ’Ό ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ собСсСдованию ΠΏΠΎ Python: Ρ€Π΅ΡˆΠ°Π΅ΠΌ 5 интСрСсных Π·Π°Π΄Π°Ρ‡

Π—Π°Π΄Π°Ρ‡Π° 4: Π’Ρ‹Ρ€ΡƒΠ±ΠΊΠ° Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²

Π€Π΅Ρ€ΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹Ρ€ΡƒΠ±ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ, растущиС ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π΄ΠΎΠΌΠΎΠΌ. Π”Π΅Ρ€Π΅Π²ΡŒΡ ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠΌΠΎΠΌ посаТСны Π² ряд, всСго Ρ‚Π°ΠΌ растСт n Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ сосСдними Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. ПослС Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠΌΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ m Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², ΠΈ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ сосСдними Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Ρ„Π΅Ρ€ΠΌΠ΅Ρ€Ρƒ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, сколько сущСствуСт способов Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π².

ВрСбуСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ числам n ΠΈ m ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚, сколько сущСствуСт способов Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· n Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ послС Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ m Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², ΠΈ сосСдниС Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ€Π°Π²Π½ΠΎΠΌ расстоянии Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, выглядят Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ для m = 5 ΠΈ n = 3:

   Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ для m = 5 ΠΈ n = 3
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ для m = 5 ΠΈ n = 3

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°:

Π’Ρ‹Π²ΠΎΠ΄:

РСшСниС

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ послС Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ d. Π’ΠΎΠ³Π΄Π° сущСствуСт n – d Ρ… (m – 1) – m + 1 способов Π²Ρ‹Ρ€ΡƒΠ±ΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΡŒΡ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ способы ΠΏΠΎ всСм d. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ 2 частных случая – ΠΊΠΎΠ³Π΄Π° количСство ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ послС Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Ρ€Π°Π²Π½ΠΎ 0 ΠΈΠ»ΠΈ 1.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ 1:

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ 2:

Π—Π°Π΄Π°Ρ‡Π° 5. Π‘ΠΈΠΌΠΏΠ°Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·ΠΎΡ€Ρ‹

ΠœΠ°ΡΡ‚Π΅Ρ€-ΠΏΠ»ΠΈΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΠ»Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ m x n ΡƒΠ·ΠΎΡ€Ρ‹ ΠΈΠ· Ρ‡Π΅Ρ€Π½Ρ‹Ρ… ΠΈ Π±Π΅Π»Ρ‹Ρ… ΠΏΠ»ΠΈΡ‚ΠΎΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 Ρ… 1 ΠΌΠ΅Ρ‚Ρ€. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ…ΠΎΡ‡Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·ΠΎΡ€ Π±Ρ‹Π» ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ Π½Π΅ повторял ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Ρ‹ мастСра. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠ·ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ симпатичным. Π£Π·ΠΎΡ€ являСтся симпатичным, Ссли Π² Π½Π΅ΠΌ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ встрСчаСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° 2Γ—2 ΠΌΠ΅Ρ‚Ρ€Π°, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΏΠ»ΠΈΡ‚ΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°.Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ симпатичных ΡƒΠ·ΠΎΡ€ΠΎΠ²:

   Π‘ΠΈΠΌΠΏΠ°Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·ΠΎΡ€Ρ‹
Π‘ΠΈΠΌΠΏΠ°Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·ΠΎΡ€Ρ‹

А Π½Π° этой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ – ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ нСсимпатичных:

   НСсимпатичныС ΡƒΠ·ΠΎΡ€Ρ‹
НСсимпатичныС ΡƒΠ·ΠΎΡ€Ρ‹

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚, сколько Π·Π°ΠΊΠ°Π·ΠΎΠ² смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ мастСр ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ограничСниях.

РСшСниС:

Π—Π°Π΄Π°Ρ‡Π° сводится ΠΊ подсчСту числа способов разбиСния мноТСства ΠΈΠ· n элСмСнтов Π½Π° m Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ подмноТСств, ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ динамичСского программирования.

Основная идСя:

КаТдоС подмноТСство кодируСтся Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ маской Π΄Π»ΠΈΠ½Ρ‹ n Π±ΠΈΡ‚. Если i-ΠΉ Π±ΠΈΡ‚ установлСн Π² 1, Π·Π½Π°Ρ‡ΠΈΡ‚ i-ΠΉ элСмСнт Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² это подмноТСство.

Π’ adj_mask[prv][cur] хранится информация ΠΎ Ρ‚ΠΎΠΌ, совмСстимы Π»ΠΈ подмноТСства prv ΠΈ cur (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ). Π­Ρ‚ΠΎ провСряСтся Π·Π°Ρ€Π°Π½Π΅Π΅ для всСх ΠΏΠ°Ρ€ подмноТСств.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа подмноТСств k ΠΎΡ‚ 1 Π΄ΠΎ m, ΠΌΡ‹ заполняСм массив dp[k][mask] – число способов Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ Π½Π° k подмноТСств, Π³Π΄Π΅ послСднСС подмноТСство ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску mask.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ k-1 подмноТСств ΠΊ k происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ adj_mask:

dp[k][cur] += dp[k-1][prv], Ссли подмноТСства prv ΠΈ cur совмСстимы.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ слуТит сумма ΠΏΠΎ всСм Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ маскам Π² dp[m-1][mask].

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ динамичСского программирования подсчитываСтся число Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ мноТСства Π½Π° m подмноТСств.

Наука
7 ΠΌΠ»Π½ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ΡΡ