ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ раскрой ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° с максимальной ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΡŽ

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ПослС Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ», ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выдаст Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями количСства Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ выводится общая ΠΎΡ†Π΅Π½ΠΊΠ° раскроя, остаток ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈ Π½Π°Π³Π»ΡΠ΄Π½Π°Ρ ΠΊΠ°Ρ€Ρ‚Π° раскроя ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π° Π² Π³Ρ€Π°Ρ„ичСской Ρ„ΠΎΡ€ΠΌΠ΅. Π‘Π΅Π»Ρ‹Π΅ части раскроя ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, красныС Π»ΠΈΠ½ΠΈΠΈ — Π»ΠΈΠ½ΠΈΠΈ ΠΎΡ‚Ρ€Π΅Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ остатка, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ раскрой ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° с максимальной ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΡŽ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π·Π°Π΄Π°Ρ‡ΠΈ

2. РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ

3. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

4. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

5. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π’Ρ‹Π²ΠΎΠ΄ ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

1.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ производствС ΠΈΠ·Π΄Π΅Π»ΠΈΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» поступаСт Π² Π²ΠΈΠ΄Π΅ Ρ€ΡƒΠ»ΠΎΠ½ΠΎΠ², полос, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… листов, стСрТнСй ΠΈ Ρ‚. Π΄. ΠŸΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» раскраиваСтся Π½Π° Ρ‡Π°ΡΡ‚ΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ собой Π² ΠΎΠ΄Π½ΠΈΡ… случаях Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… — Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ. К Π·Π°Π΄Π°Ρ‡Π°ΠΌ раскроя, относятся ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠ»ΠΎΡ‚Π½ΠΎΠ³ΠΎ размСщСния совокупности ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… участках.

Π—Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ сходными матСматичСскими модСлями. БущСствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ этих ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ опрСдСляСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ двумя Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ:

1) ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ раскроС Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ;

2) объСмом выпускаСмой ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ.

Π—Π°Π΄Π°Ρ‡ΠΈ раскроя, опрСдСляСмыС ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π½Π° Π΄Π²Π° класса. К ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ классу относятся Π·Π°Π΄Π°Ρ‡ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠ³ΠΎ раскроя, ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ — Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠ³ΠΎ раскроя. ΠŸΡ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΌ раскроС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» раскраиваСтся Π½Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. К ΠΊΠ»Π°ΡΡΡƒ Π·Π°Π΄Π°Ρ‡ Π½Π΅Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠ³ΠΎ раскроя относятся Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ раскроя. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Ρ€Π°ΡΠΊΡ€Π°ΠΈΠ²Π°ΡŽΡ‚ Π½Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… задаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π—Π°Π΄Π°Ρ‡ΠΈ раскроя, опрСдСляСмыС Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π½Π° Π΄Π²Π° класса: Π·Π°Π΄Π°Ρ‡ΠΈ раскроя Π² ΡƒΡΠ»ΠΎΠ²ΠΈΡΡ… массового (крупносСрийного) выпуска ΠΈΠ·Π΄Π΅Π»ΠΈΠΉ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ раскроя Π² ΡƒΡΠ»ΠΎΠ²ΠΈΡΡ… Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ (мСлкосСрийного) производства. К ΠΎΠ±ΠΎΠΈΠΌ классам ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠ³ΠΎ раскроя. Π—Π°Π΄Π°Ρ‡ΠΈ раскроя Π² ΡƒΡΠ»ΠΎΠ²ΠΈΡΡ… массового производства ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌΠΈ модСлями Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования, Π° Π² ΡƒΡΠ»ΠΎΠ²ΠΈΡΡ… Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ производства — цСлочислСнными. Π’ ΡΠ²ΡΠ·ΠΈ с ΡΡ‚ΠΈΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ раскроя Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… условиях часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ соотвСтствСнно Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌΠΈ ΠΈ Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹ΠΌΠΈ.

Π—Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя Π² ΡƒΡΠ»ΠΎΠ²ΠΈΡΡ… массового производства относятся ΠΊ ΠΊΠ»Π°ΡΡΡƒ Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, с Π½Π΅ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ столбцами (способами раскроя). ΠŸΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ раскроСв Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС процСсса. НиТС рассмотрСна Π·Π°Π΄Π°Ρ‡Π° гСнСрирования Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… раскроСв.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π·Π°Π΄Π°Ρ‡ΠΈ Π Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π³ΠΈΠ»ΡŒΠΎΡ‚ΠΈΠ½Π½ΠΎΠ³ΠΎ раскроя ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° (Π΄Π»ΠΈΠ½Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π°) с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΡŽ: кусок ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π΄Π»ΠΈΠ½ΠΎΠΉ L Ρ€Π°ΡΠΊΡ€Π°ΠΈΠ²Π°Π΅Ρ‚ся Π½Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ m Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ i = извСстны Π΅Π΅ Π΄Π»ΠΈΠ½Π° li ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° сi. ВрСбуСтся Π½Π°ΠΉΡ‚ΠΈ раскрой с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ.

Π—Π°Π΄Π°Ρ‡Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя Π΄Π»ΠΈΠ½Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π° носит Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° производства. НапримСр, для крупносСрийного производства Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ: стрСмлСниС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ остаток, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ‚ Ρ€Π°ΡΠΊΡ€ΠΎΡ ΠΈ Ρ‚. Π΄. Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ динамичСского программирования с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ «ΡΠ΅Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ», ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ гСнСрирования раскроСв Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС процСсса.

2. РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ кусок ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π΄Π»ΠΈΠ½ΠΎΠΉ L Ρ€Π°ΡΠΊΡ€Π°ΠΈΠ²Π°Π΅Ρ‚ся Π½Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ m Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ i = извСстны Π΅Π΅ Π΄Π»ΠΈΠ½Π° li ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° сi. ВрСбуСтся Π½Π°ΠΉΡ‚ΠΈ раскрой с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ.

Раскрой ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС число ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ. Π’ΠΎΠ³Π΄Π° Π½Π°Π±ΠΎΡ€ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ характСризуСтся m-ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ

X = (x1, x2, …, xm), (1)

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ†Π΅Π»Ρ‹Π΅ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Ρ‡ΠΈΡΠ»ΠΎ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. ΠŸΡ€ΠΈ этом трСбуСтся ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΠΌΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ

(2)

Π½Π°Π±ΠΎΡ€Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ (1) ΠΏΡ€ΠΈ СдинствСнном Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ

.(3)

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ раскроя Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ цикличСский процСсс, состоящий ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

(4)

xXl

Π³Π΄Π΅ Ρ‡Π΅Ρ€Π΅Π· Xi ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ мноТСство Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Ρ…, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… раскроям, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… общая Π΄Π»ΠΈΠ½Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ Π½Π΅ ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄ΠΈΡ‚ Π΄Π»ΠΈΠ½Ρ‹ l. ΠŸΡƒΡΡ‚ΡŒ l0 = min li, Π³Π΄Π΅ i =1…m.

Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ всСх l[0,l0] ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ мноТСства Xl состоят ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнта ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, f (l) = 0 для всСх Ρ‚Π°ΠΊΠΈΡ… l. Для l[0,L0], справСдливы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ:

(5)

iIl

Π³Π΄Π΅ Ρ‡Π΅Ρ€Π΅Π· Il ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ мноТСство Ρ‚Π΅Ρ… i, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… lil.

ΠžΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (5), ΠΌΠΎΠΆΠ½ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ простой числСнный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх допустимых раскроСв. РСализация всСго процСсса основываСтся Π½Π° Π΄Π²ΡƒΡ… этапах:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ этап

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС осущСствляСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ прямой Ρ…ΠΎΠ΄: ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ (5) для всСх l = ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f (l) ΠΈ ΠΏΡ€ΠΈ этом Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ индСксы i (l), ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… достигаСтся максимум Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ (5). ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΈ этом информация l, f (l) ΠΈ i (l) запоминаСтся ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΠΎ записываСтся Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

l

l0

l0 + 1

l0 + 2

L

f (l)

f (l0)

f (l0 + 1)

f (l0 + 2)

f (L)

i (l)

i (l0)

i (l0 + 1)

i (l0 + 2)

i (L)

Π’Ρ‚ΠΎΡ€ΠΎΠΉ этап

На Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС осущСствляСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄: для получСния искомого Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Ρ… (1), для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся равСнство (x) = f (L), Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ i (l1), Π³Π΄Π΅ l1 = L, ΠΈ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚ываСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ l2= l1-li(l1).

Если l2l0, Ρ‚ΠΎ Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ i (l2) ΠΈ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚ываСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ l3=l2-li(l2) ΠΈ Ρ‚. Π΄. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ k1 ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ lk+1lk-l0, Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число описанных шагов окаТСтся, Ρ‡Ρ‚ΠΎ lk+1< l0. На ΡΡ‚ΠΎΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ искомого раскроя заканчиваСтся ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

3. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ раскроя l ΠΎΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π΄Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°.

2. ВычисляСтся ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс (Π½ΠΎΠΌΠ΅Ρ€) Π΄Π΅Ρ‚Π°Π»ΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

3. Если Π½Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ся Π½Π΅ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ Π»ΠΈ максимум Ρ†Π΅Π½Ρ‹ раскроя для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния Π΄Π»ΠΈΠ½Ρ‹ раскроя l.

Если максимум достигнут, Ρ‚ΠΎ ΠΎΠ½ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ся. ПослСдняя добавлСнная Π΄Π΅Ρ‚Π°Π»ΡŒ удаляСтся ΠΈΠ· Ρ€Π°ΡΠΊΡ€ΠΎΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ (ΠΏ. 4). Если Π½Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ, происходит Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°.

4. ЗапоминаСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ раскрой. Π”Π»ΠΈΠ½Π° раскроя ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° Π΄Π»ΠΈΠ½Ρƒ Π΄Π΅Ρ‚Π°Π»ΠΈ. Π¦Π΅Π½Π° раскроя увСличиваСтся Π½Π° Ρ†Π΅Π½Ρƒ Π΄Π΅Ρ‚Π°Π»ΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π΅Ρ‚Π°Π»ΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΏ. 2).

5. БСрСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° раскроя, равная Π΄Π»ΠΈΠ½Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. БСрСтся Π΄Π΅Ρ‚Π°Π»ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» достигнут максимум для Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. Из Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° вычитаСтся Π΄Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΊ ΡΡ‚оимости раскроя прибавляСтся Ρ†Π΅Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ. П. 5 повторяСтся, ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊ Ρ€Π°ΡΠΊΡ€ΠΎΡŽ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°.

6. Зная количСство Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡ… Π²ΠΈΠ΄Π°, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ раскрой, формируСтся искомый Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ….

//ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° вычислСния Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя

procedure searchRationalCut (

materialLength: integer;

detailAmount: integer;

var details: array of TDetail;

var x: array of integer);

var

l0, l, i: integer;

currCut: TCutRecord;

maxCut: TCutRecord;

cutRecords: array[0.MAX_CUTRECORD_AMOUNT-1] of TCutRecord;

cutRecords1: array[1.MAX_CUTRECORD_AMOUNT] of TCutRecord;

i1, j1: integer;

begin

l0:=details[0]. l;

for l:=l0 to materialLength do

begin

currCut.l:=l;

currCut.c:=0;

currCut.i:=0;

currCut.max_i:=-1;

maxCut.l:=0;

maxCut.c:=0;

maxCut.i:=0;

maxCut.max_i:=0;

j1:=0;

while true do

begin

if currCut. max_i=-1 then

begin

for i1:=0 to detailAmount-1 do

begin

if details[i1]. l<=currCut.l then

begin

currCut.max_i:=i1;

currCut.i:=0;

end;

end;

end;

if (currCut.max_i=-1) or (currCut.i>currCut.max_i) then

begin

if j1<>0 then

begin

if currCut. c>maxCut.c then

begin

maxCut:=currCut;

end;

currCut:=cutRecords1[j1];

j1:=j1−1;

currCut.i:=currCut.i+1;

end

else

begin

break;

end;

end

else

begin

if (currCut.l>=l0) and (currCut.l

begin

if cutRecords[currCut.l]. c+currCut.c>maxCut.c then

begin

maxCut:=cutRecords[currCut.l];

maxCut.c:=maxCut.c+currCut.c;

end;

currCut.i:=currCut.i+1;

continue;

end;

j1:=j1+1;

cutRecords1[j1]:=currCut;

currCut.l:=currCut.l-details[currCut.i].l;

currCut.c:=currCut.c+details[currCut.i].c;

currCut.max_i:=-1;

end;

end;

cutRecords[l]:=maxCut;

cutRecords[l].l:=l;

end;

for i:=0 to detailAmount-1 do

begin

x[i]: =0;

end;

l:=materialLength;

while l>=details[0]. l do

begin

x[cutRecords[l]. i]:=x[cutRecords[l].i]+1;

l:=l-details[cutRecords[l].i].l;

end;

end;

4. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ΠΈΠ΄ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅:

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ прСдлагаСтся ввСсти Π΄Π»ΠΈΠ½Ρƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π·Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈ.

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

5. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡƒΡΡ‚ΡŒ Π² Π·Π°Π΄Π°Ρ‡Π΅ гСнСрирования Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ раскроя Π·Π°Π΄Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: Π΄Π»ΠΈΠ½Π° ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π° L = 40, количСство Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ m = 4, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½ li ΠΈ ΡΡ‚оимости ci ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

i

li

ci

РСшаСм Π·Π°Π΄Π°Ρ‡Ρƒ сСточным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ: сначала выполняСм прямой Ρ…ΠΎΠ΄. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ раскроя, Ρ€Π°Π²Π½ΠΎΠ΅ минимальной Π΄Π»ΠΈΠ½Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ: l0 = min li = 7 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ «ΡˆΠ°Π³Π°Π΅ΠΌ» Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π°, Ρ‚. Π΅. 40.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ раскрой, начиная с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅. Для подсчСта стоимости раскроя Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ шагС ΠΌΡ‹ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ Π΄Π»ΠΈΠ½Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ раскроя ΠΈ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ раскрой с Π΄Π»ΠΈΠ½ΠΎΠΉ, Ρ€Π°Π²Π½ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ остатку ΠΈ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΎΡ†Π΅Π½ΠΊΡƒ с ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈ. Из Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΠΎΡ†Π΅Π½ΠΎΠΊ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈ Π·Π°Π½ΠΎΡΠΈΠΌ Π΅Ρ‘ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, вмСстС с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ эта ΠΎΡ†Π΅Π½ΠΊΠ° Π±Ρ‹Π»Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°.

Π”Π°Π»Π΅Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ этапа (прямого Ρ…ΠΎΠ΄Π°) процСсса:

l

f (l)

i (l)

l

f (l)

i (l)

Π—Π΄Π΅ΡΡŒ ΠΈ Π΄Π°Π»Π΅Π΅ i (l) — Π½ΠΎΠΌΠ΅Ρ€ Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ соотвСтствуСт максимальная ΠΎΡ†Π΅Π½ΠΊΠ° раскроя (сумма стоимости всСх Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, входящих Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ) f (l) Π½Π° ΡˆΠ°Π³Π΅ l.

Рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ шагов

l = 7…14, 22.

1) l = 7

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π΄Π΅Ρ‚Π°Π»ΡŒ: i = 1. Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ 7, ΠΎΡ†Π΅Π½ΠΊΠ° 9.

ВычисляСм остаток ΠΎΡ‚ Ρ€Π°ΡΠΊΡ€ΠΎΡ: 7 — 7 = 0. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ остаток Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, Ρ‚ΠΎ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ€Π°ΡΠΊΡ€ΠΎΠΉ, Π½Π΅Ρ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, максимальная ΠΎΡ†Π΅Π½ΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ раскроя Ρ€Π°Π²Π½Π° f = 9. Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ значСния i (7) = 1, f (7) = 9 ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ раскроя.

2) l = 8

Π‘Π½ΠΎΠ²Π° Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π΄Π΅Ρ‚Π°Π»ΡŒ: i = 1. Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ 7, ΠΎΡ†Π΅Π½ΠΊΠ° 9.

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ: 8 — 7 = 1. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ с Ρ‚Π°ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ Π½Π΅Ρ‚, максимальная ΠΎΡ†Π΅Π½ΠΊΠ° раскроя f = 9. Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (8) = 1, f (8) = 9.

3) l = 9

i = 1, остаток 9 — 7 = 2, f = 9.

Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (9) = 1, f (9) = 9.

4) l = 10

i = 1, остаток 10 — 7 = 3, f = 9.

Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (10) = 1, f (10) = 9.

5) l = 11

i = 1, остаток 11 — 7 = 4, f = 9.

Учитывая, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ раскрой Ρ‚Π°ΠΊΠΆΠ΅ умСстится Π΄Π΅Ρ‚Π°Π»ΡŒ i = 2 c Π΄Π»ΠΈΠ½ΠΎΠΉ 11, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ: i = 2, остаток 11 — 11 = 0, f = 14.

Π‘Ρ€Π°Π²Π½ΠΈΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ раскроСв. Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ (f = 14) ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΅ΠΉ Π΄Π΅Ρ‚Π°Π»ΡŒ (i = 2).

Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (11) = 2, f (11) = 14.

6) l = 12

i = 1, остаток 12 — 7 = 5, f = 9.

i = 2, остаток 12 — 11 = 1, f = 14 (максимум) Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (12) = 2, f (12) = 14.

7) l = 13

i = 1, остаток 13 — 7 = 6, f = 9.

i = 2, остаток 13 — 11 = 2, f = 14.

i = 3, остаток 13 — 13 = 0, f = 16 (максимум) Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (13) = 3, f (13) = 16.

8) l = 14

i = 1, остаток 14 — 7 = 7.

Если ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π° остатка раскроя большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π΄Π»ΠΈΠ½Ρ‹ раскроя (l0 = 7), Ρ‚. Π΅. Π² ΠΎΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ какая-Π»ΠΈΠ±ΠΎ Π΄Π΅Ρ‚Π°Π»ΡŒ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС с ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ i = 1), ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ считываСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ†Π΅Π½ΠΊΠΈ раскроя f (i) ΠΏΡ€ΠΈ i, Ρ€Π°Π²Π½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ остатка: f (7) = 9, Ρ‚ΠΎΠ³Π΄Π° суммарная ΠΎΡ†Π΅Π½ΠΊΠ° раскроя f = f (7) + 9 = 9 + 9 = 18 (максимум)

i = 2, остаток 14 — 11 = 3, f = 14.

i = 3, остаток 14 — 13 = 1, f = 16.

Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (14) = 1, f (14) = 18.

…16) l = 22

i = 1, остаток 22 — 7 = 15, f (15) = 18, f = 18 + 9 = 27.

i = 2, остаток 22 — 11 = 11, f (11) = 14, f = 14 + 14 = 28 (максимум)

i = 3, остаток 22 — 13 = 9, f (9) = 9, f = 9 + 16 = 25.

i = 4, остаток 22 — 17 = 5, f = 22.

Заносим Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ i (22) = 2, f (22) = 28. ΠΈ Ρ‚. Π΄., ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π°.

ВыполняСм ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄ (Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠ½Ρ†Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹):

1) l = 40

Из Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ индСкс Π΄Π΅Ρ‚Π°Π»ΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ раскрой: i (40) = 1.

Находим Π΄Π»ΠΈΠ½Ρƒ Π΄Π΅Ρ‚Π°Π»ΠΈ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ индСксом: l1 = 7.

ВычисляСм остаток раскроя: 40 — 7 = 33. Π­Ρ‚ΠΎΡ‚ остаток ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ шага ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ…ΠΎΠ΄Π°.

2) l = 33

ИндСкс Π΄Π΅Ρ‚Π°Π»ΠΈ: i (33) = 2.

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ: l2 = 11.

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ раскроя: 33 — 11 = 22.

3) l = 22

ИндСкс Π΄Π΅Ρ‚Π°Π»ΠΈ: i (22) = 2.

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ: l2 = 11.

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ раскроя: 22 — 11 = 11.

4) l = 11

ИндСкс Π΄Π΅Ρ‚Π°Π»ΠΈ: i (11) = 2.

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ: l2 = 11.

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ раскроя: 11 — 11 = 0. ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ подсчитываСм количСство Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Ρ…ΠΎΠ΄Π΅. Π”Π΅Ρ‚Π°Π»ΡŒ с ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ i = 1 Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»Π°ΡΡŒ 1 Ρ€Π°Π·, Π΄Π΅Ρ‚Π°Π»ΡŒ с ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ i = 2 Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»Π°ΡΡŒ 3 Ρ€Π°Π·Π°.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, искомый ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ раскрой характСризуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ x = (1; 3; 0; 0).

Π’ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ прямого Ρ…ΠΎΠ΄Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΎΠΌΠ΅Ρ€Π° Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ Π² ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ раскрой.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°):

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π”Π»ΠΈΠ½Π° ΠΏΡ€ΠΎΠΊΠ°Ρ‚Π°: 40

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ: 4

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 1…: 7 Π¦Π΅Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 1…: 9

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 2…: 11 Π¦Π΅Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 2…: 14

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 3…: 13 Π¦Π΅Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 3…: 16

Π”Π»ΠΈΠ½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 4…: 17 Π¦Π΅Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ № 4…: 22

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ количСство Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

Π”Π΅Ρ‚Π°Π»ΡŒ № 1…: 1 ΡˆΡ‚.

Π”Π΅Ρ‚Π°Π»ΡŒ № 2…: 3 ΡˆΡ‚.

Π”Π΅Ρ‚Π°Π»ΡŒ № 3…: 0 ΡˆΡ‚.

Π”Π΅Ρ‚Π°Π»ΡŒ № 4…: 0 ΡˆΡ‚.

ΠžΡ†Π΅Π½ΠΊΠ° раскроя: 51 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°: 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ вычислСний ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ€Π°Π±ΠΎΡ‚оспособности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° для Π­Π’Πœ.

Π’Ρ‹Π²ΠΎΠ΄ Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ поставлСнная Π·Π°Π΄Π°Ρ‡Π° Π±Ρ‹Π»Π° Ρ€Π΅ΡˆΠ΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСточного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Как ΠΏΠΎΠΊΠ°Π·Π°Π»Π° продСланная Ρ€Π°Π±ΠΎΡ‚Π°, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ эффСктивСн ΠΈ ΠΏΡ€ΠΎΡΡ‚ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π­Π’Πœ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π’ Π½Ρ‘ΠΌ рСализуСтся Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ находится Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ раскрой с ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌΠΎΠΌ ΠΏΡ€ΠΈΠ±Ρ‹Π»ΠΈ.

Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Ρ‹ Ρ€ΡƒΡ‡Π½Ρ‹Π΅ вычислСния ΠΈ ΠΏΠΎ Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Π­Π’Πœ. Разработанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ ΡΠ΅Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ раскроя достаточно ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… отраслях ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ массовом производствС, ΠΏΡ€ΠΈ этом Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ слСдуСт Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, связанныС с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ производства ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ оборудования.

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids, ComCtrls, ExtCtrls;

type

//Π΄Π΅Ρ‚Π°Π»ΡŒ

TDetail=record

l: integer;//Π΄Π»ΠΈΠ½Π°

c: integer;//Ρ†Π΅Π½Π°

end;

//запись раскроя

TCutRecord=record

l: integer;//Π΄Π»ΠΈΠ½Π°

c: integer;//Ρ†Π΅Π½Π°

i: integer;//индСкс Π΄Π΅Ρ‚Π°Π»ΠΈ

max_i: integer;//ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс Π΄Π΅Ρ‚Π°Π»ΠΈ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

end;

TForm_Main = class (TForm)

GroupBox1: TGroupBox;

Edit_MaterialLength: TEdit;

Label_MaterialLength: TLabel;

UpDown_MaterialLength: TUpDown;

Label_DetailAmount: TLabel;

UpDown_DetailAmount: TUpDown;

Edit_DetailAmount: TEdit;

StringGrid_In: TStringGrid;

GroupBox2: TGroupBox;

StringGrid_Out1: TStringGrid;

Button_Calculate: TButton;

Button_Exit: TButton;

GroupBox3: TGroupBox;

Image_Cut: TImage;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

procedure Button_ExitClick (Sender: TObject);

procedure Edit_DetailAmountChange (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure Edit_MaterialLengthChange (Sender: TObject);

procedure Button_CalculateClick (Sender: TObject);

procedure Button1Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

MAX_DETAIL_AMOUNT=10;//максимальноС ΠΊΠΎΠ»-Π²ΠΎ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ

MAX_CUTRECORD_AMOUNT=10 000;//максимальноС ΠΊΠΎΠ»-Π²ΠΎ записСй раскроя

MAX_MATERIAL_LENGTH=10 000;//максимальная Π΄Π»ΠΈΠ½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

var

Form_Main: TForm_Main;

materialLength: integer;//Π΄Π»ΠΈΠ½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

detailAmount: integer;//ΠΊΠΎΠ»-Π²ΠΎ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ

details: array[1.MAX_DETAIL_AMOUNT] of TDetail;//Π΄Π΅Ρ‚Π°Π»ΠΈ

x: array[1.MAX_DETAIL_AMOUNT] of integer;//Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

implementation

uses Unit2;

{$R *.DFM}

//ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° вычислСния Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя

procedure searchRationalCut (

materialLength: integer;

detailAmount: integer;

var details: array of TDetail;

var x: array of integer);

var

l0, l, i: integer;

currCut: TCutRecord;

maxCut: TCutRecord;

cutRecords: array[0.MAX_CUTRECORD_AMOUNT-1] of TCutRecord;

cutRecords1: array[1.MAX_CUTRECORD_AMOUNT] of TCutRecord;

i1, j1: integer;

begin

l0:=details[0]. l;

for l:=l0 to materialLength do

begin

currCut.l:=l;

currCut.c:=0;

currCut.i:=0;

currCut.max_i:=-1;

maxCut.l:=0;

maxCut.c:=0;

maxCut.i:=0;

maxCut.max_i:=0;

j1:=0;

while true do

begin

if currCut. max_i=-1 then

begin

for i1:=0 to detailAmount-1 do

begin

if details[i1]. l<=currCut.l then

begin

currCut.max_i:=i1;

currCut.i:=0;

end;

end;

end;

if (currCut.max_i=-1) or (currCut.i>currCut.max_i) then

begin

if j1<>0 then

begin

if currCut. c>maxCut.c then

begin

maxCut:=currCut;

end;

currCut:=cutRecords1[j1];

j1:=j1−1;

currCut.i:=currCut.i+1;

end

else

begin

break;

end;

end

else

begin

if (currCut.l>=l0) and (currCut.l

begin

if cutRecords[currCut.l]. c+currCut.c>maxCut.c then

begin

maxCut:=cutRecords[currCut.l];

maxCut.c:=maxCut.c+currCut.c;

end;

currCut.i:=currCut.i+1;

continue;

end;

j1:=j1+1;

cutRecords1[j1]:=currCut;

currCut.l:=currCut.l-details[currCut.i].l;

currCut.c:=currCut.c+details[currCut.i].c;

currCut.max_i:=-1;

end;

end;

cutRecords[l]:=maxCut;

cutRecords[l].l:=l;

end;

for i:=0 to detailAmount-1 do

begin

x[i]: =0;

end;

l:=materialLength;

while l>=details[0]. l do

begin

x[cutRecords[l]. i]:=x[cutRecords[l].i]+1;

l:=l-details[cutRecords[l].i].l;

end;

end;

//Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

procedure updateData;

var

i: integer;

begin

materialLength:=strToInt (Form_Main.Edit_MaterialLength.Text);

detailAmount:=strToInt (Form_Main.Edit_DetailAmount.Text);

for i:=1 to detailAmount do

begin

details[i]. l:=strToInt (Form_Main.StringGrid_In.Cells[1,i]);

details[i].c:=strToInt (Form_Main.StringGrid_In.Cells[2,i]);

end;

end;

//графичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя

procedure drawRationalCut (

image: TImage;

materialLength: integer;

detailAmount: integer;

details: array of TDetail;

x: array of integer);

var

i, j: integer;

sum: integer;

k_x: real;

curr_x: integer;

curr_x_scr: real;

begin

sum:=0;

for i:=0 to detailAmount-1 do

begin

sum:=sum+x[i]*details[i]. l;

end;

k_x:=image.width/materialLength;

with image. Canvas do

begin

brush.Style:=bsSolid;

brush.Color:=clBtnFace;

fillRect (rect (0, 0, image. width, image. height));

brush.Color:=clGray;

pen.Color:=clGray;

rectangle (trunc (k_x*sum), 0, trunc (k_x*materialLength), 50);

brush.Color:=clWhite;

pen.Color:=clGray;

rectangle (0, 0, trunc (k_x*sum), 50);

pen.Color:=clRed;

brush.Style:=bsClear;

textOut (0,51,'0');

curr_x:=0;

curr_x_scr:=0;

for i:=0 to detailAmount-1 do

begin

for j:=0 to x[i]-1 do

begin

curr_x:=curr_x+details[i]. l;

curr_x_scr:=curr_x_scr+k_x*details[i].l;

if curr_x<>materialLength then

begin

moveTo (trunc (curr_x_scr), 0);

lineTo (trunc (curr_x_scr), 50);

textOut (trunc (curr_x_scr), 51, intToStr (curr_x));

// textOut (trunc (curr_x_scr-15), 21, '('+intToStr (i+1)+')');

end;

end;

end;

end;

end;

//Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

procedure TForm_Main.Button_ExitClick (Sender: TObject);

begin

close;

end;

//ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»-Π²Π° Π΄Π΅Ρ‚Π΅Π°Π»Π΅ΠΉ

procedure TForm_Main.Edit_DetailAmountChange (Sender: TObject);

var

new_d_a: integer;

i: integer;

begin

new_d_a:=strToInt (Form_Main.Edit_DetailAmount.Text);

if (new_d_a>=1) then

begin

if (new_d_a<=MAX_DETAIL_AMOUNT) then

begin

Form_Main.StringGrid_In.RowCount:=new_d_a+1;

for i:=1 to new_d_a do

begin

Form_Main.StringGrid_In.Cells[0,i]: =intToStr (i);

end;

end

else

begin

Form_Main.Edit_DetailAmount.Text:=intToStr (MAX_DETAIL_AMOUNT);

end;

end

else

begin

Form_Main.Edit_DetailAmount.Text:=intToStr (1);

end;

end;

//инициализация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

procedure TForm_Main.FormCreate (Sender: TObject);

begin

Form_Main.UpDown_MaterialLength.Min:=1;

Form_Main.UpDown_MaterialLength.Max:=MAX_MATERIAL_LENGTH;

Form_Main.UpDown_DetailAmount.Min:=1;

Form_Main.UpDown_DetailAmount.Max:=MAX_DETAIL_AMOUNT;

Form_Main.StringGrid_In.Cells[0,0]: ='β„– Π΄Π΅Ρ‚Π°Π»ΠΈ';

Form_Main.StringGrid_In.Cells[1,0]: ='Π”Π»ΠΈΠ½Π°';

Form_Main.StringGrid_In.Cells[2,0]:='Π¦Π΅Π½Π°';

Form_Main.StringGrid_In.Cells[0,1]:='1';

Form_Main.StringGrid_Out1.Cells[0,0]:='β„– Π΄Π΅Ρ‚Π°Π»ΠΈ';

Form_Main.StringGrid_Out1.Cells[1,0]: ='ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ';

end;

//ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

procedure TForm_Main.Edit_MaterialLengthChange (Sender: TObject);

var

new_m_l: integer;

begin

new_m_l:=strToInt (Form_Main.Edit_MaterialLength.Text);

if (new_m_l>=1) then

begin

if not (new_m_l<=MAX_MATERIAL_LENGTH) then

begin

Form_Main.Edit_MaterialLength.Text:=intToStr (MAX_MATERIAL_LENGTH);

end;

end

else

begin

Form_Main.Edit_MaterialLength.Text:=intToStr (1);

end;

end;

//сортировка Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ Π΄Π»ΠΈΠ½Ρ‹ Π΄Π΅Ρ‚Π°Π»ΠΈ

procedure StrGridSort;

var

i: integer;

do_next: boolean;

begin

do_next:=true;

while do_next do

begin

do_next:=false;

for i:=1 to Form_Main.StringGrid_In.RowCount-2 do

begin

if strToInt (Form_Main.StringGrid_In.Cells[1,i])>

strToInt (Form_Main.StringGrid_In.Cells[1,i+1]) then

begin

Form_Main.StringGrid_In.cols[1]. Exchange (i, i+1);

Form_Main.StringGrid_In.cols[2].Exchange (i, i+1);

do_next:=true;

end;

end;

end;

end;

//вычислСниС Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ раскроя ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

procedure TForm_Main.Button_CalculateClick (Sender: TObject);

var

i, sum, cost: integer;

begin

strGridSort;

updateData;

searchRationalCut (materialLength, detailAmount, details, x);

Form_Main.StringGrid_Out1.RowCount:=detailAmount+1;

sum:=0; cost:=0;

for i:=1 to detailAmount do

begin

Form_Main.StringGrid_Out1.Cells[0,i]: =intToStr (i);

Form_Main.StringGrid_Out1.Cells[1,i]:=intToStr (x[i]);

sum:=sum+x[i]*details[i].l;

cost:=cost+x[i]*details[i].c;

end;

Form_Main.Edit1.Text:=intToStr (cost);

Form_Main.Edit2.Text:=intToStr (materialLength-sum);

drawRationalCut (Form_Main.Image_Cut, materialLength, detailAmount, details, x);

end;

procedure TForm_Main.Button1Click (Sender: TObject);

begin

Form2.Show;

end;

end.

1. Π­. А. ΠœΡƒΡ…Π°Ρ‡Π΅Π²Π° «Π Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ раскрой ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²». Москва, ΠœΠ°ΡˆΠΈΠ½ΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅, 1984 Π³.

2. Π­. А. ΠœΡƒΡ…Π°Ρ‡Π΅Π²Π°, Π“. Π¨. Π ΡƒΠ±ΠΈΠ½ΡˆΡ‚Π΅ΠΉΠ½ «ΠœΠ°Ρ‚СматичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅». Новосибирск, Наука, 1977 Π³.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ