[{"data":1,"prerenderedAt":3611},["ShallowReactive",2],{"navigation":3,"/blog/python/st34":386,"/blog/python/st34-surround":3606},[4],{"title":5,"path":6,"stem":7,"children":8,"page":114},"Blog","/blog","blog",[9,115,184,329],{"title":10,"path":11,"stem":12,"children":13,"page":114},"Ege","/blog/ege","blog/ege",[14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110],{"title":15,"path":16,"stem":17},"ЕГЭ Задание 1","/blog/ege/task1","blog/ege/task1",{"title":19,"path":20,"stem":21},"ЕГЭ Задание 10","/blog/ege/task10","blog/ege/task10",{"title":23,"path":24,"stem":25},"ЕГЭ Задание 11","/blog/ege/task11","blog/ege/task11",{"title":27,"path":28,"stem":29},"ЕГЭ Задание 12","/blog/ege/task12","blog/ege/task12",{"title":31,"path":32,"stem":33},"ЕГЭ Задание 13","/blog/ege/task13","blog/ege/task13",{"title":35,"path":36,"stem":37},"ЕГЭ Задание 14","/blog/ege/task14","blog/ege/task14",{"title":39,"path":40,"stem":41},"ЕГЭ Задание 15","/blog/ege/task15","blog/ege/task15",{"title":43,"path":44,"stem":45},"ЕГЭ Задание 16","/blog/ege/task16","blog/ege/task16",{"title":47,"path":48,"stem":49},"ЕГЭ Задание 17","/blog/ege/task17","blog/ege/task17",{"title":51,"path":52,"stem":53},"ЕГЭ Задание 18","/blog/ege/task18","blog/ege/task18",{"title":55,"path":56,"stem":57},"ЕГЭ Задание 19, 20, 21","/blog/ege/task19_20_21","blog/ege/task19_20_21",{"title":59,"path":60,"stem":61},"ЕГЭ Задание 2","/blog/ege/task2","blog/ege/task2",{"title":63,"path":64,"stem":65},"ЕГЭ Задание 22","/blog/ege/task22","blog/ege/task22",{"title":67,"path":68,"stem":69},"ЕГЭ Задание 23","/blog/ege/task23","blog/ege/task23",{"title":71,"path":72,"stem":73},"ЕГЭ Задание 24","/blog/ege/task24","blog/ege/task24",{"title":75,"path":76,"stem":77},"ЕГЭ Задание 25","/blog/ege/task25","blog/ege/task25",{"title":79,"path":80,"stem":81},"ЕГЭ Задание 26","/blog/ege/task26","blog/ege/task26",{"title":83,"path":84,"stem":85},"ЕГЭ Задание 27","/blog/ege/task27","blog/ege/task27",{"title":87,"path":88,"stem":89},"ЕГЭ Задание 3","/blog/ege/task3","blog/ege/task3",{"title":91,"path":92,"stem":93},"ЕГЭ Задание 4","/blog/ege/task4","blog/ege/task4",{"title":95,"path":96,"stem":97},"ЕГЭ Задание 5","/blog/ege/task5","blog/ege/task5",{"title":99,"path":100,"stem":101},"ЕГЭ Задание 6","/blog/ege/task6","blog/ege/task6",{"title":103,"path":104,"stem":105},"ЕГЭ Задание 7","/blog/ege/task7","blog/ege/task7",{"title":107,"path":108,"stem":109},"ЕГЭ Задание 8","/blog/ege/task8","blog/ege/task8",{"title":111,"path":112,"stem":113},"ЕГЭ Задание 9","/blog/ege/task9","blog/ege/task9",false,{"title":116,"path":117,"stem":118,"children":119,"page":114},"Oge","/blog/oge","blog/oge",[120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180],{"title":121,"path":122,"stem":123},"ОГЭ Задание 1","/blog/oge/task1","blog/oge/task1",{"title":125,"path":126,"stem":127},"ОГЭ Задание 10","/blog/oge/task10","blog/oge/task10",{"title":129,"path":130,"stem":131},"ОГЭ Задание 11","/blog/oge/task11","blog/oge/task11",{"title":133,"path":134,"stem":135},"ОГЭ Задание 12","/blog/oge/task12","blog/oge/task12",{"title":137,"path":138,"stem":139},"ОГЭ Задание 13","/blog/oge/task13","blog/oge/task13",{"title":141,"path":142,"stem":143},"ОГЭ Задание 14","/blog/oge/task14","blog/oge/task14",{"title":145,"path":146,"stem":147},"ОГЭ Задание 15","/blog/oge/task15","blog/oge/task15",{"title":149,"path":150,"stem":151},"ОГЭ Задание 16","/blog/oge/task16","blog/oge/task16",{"title":153,"path":154,"stem":155},"ОГЭ Задание 2","/blog/oge/task2","blog/oge/task2",{"title":157,"path":158,"stem":159},"ОГЭ Задание 3","/blog/oge/task3","blog/oge/task3",{"title":161,"path":162,"stem":163},"ОГЭ Задание 4","/blog/oge/task4","blog/oge/task4",{"title":165,"path":166,"stem":167},"ОГЭ Задание 5","/blog/oge/task5","blog/oge/task5",{"title":169,"path":170,"stem":171},"ОГЭ Задание 6","/blog/oge/task6","blog/oge/task6",{"title":173,"path":174,"stem":175},"ОГЭ Задание 7","/blog/oge/task7","blog/oge/task7",{"title":177,"path":178,"stem":179},"ОГЭ Задание 8","/blog/oge/task8","blog/oge/task8",{"title":181,"path":182,"stem":183},"ОГЭ Задание 9","/blog/oge/task9","blog/oge/task9",{"title":185,"path":186,"stem":187,"children":188,"page":114},"Python","/blog/python","blog/python",[189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325],{"title":190,"path":191,"stem":192},"Знакомство с синтаксисом","/blog/python/st1","blog/python/st1",{"title":194,"path":195,"stem":196},"Отладка","/blog/python/st10","blog/python/st10",{"title":198,"path":199,"stem":200},"Модули и пакеты","/blog/python/st11","blog/python/st11",{"title":202,"path":203,"stem":204},"Кортежи","/blog/python/st12","blog/python/st12",{"title":206,"path":207,"stem":208},"Знакомство со списками","/blog/python/st13","blog/python/st13",{"title":210,"path":211,"stem":212},"Списки и циклы","/blog/python/st14","blog/python/st14",{"title":214,"path":215,"stem":216},"Использование списков ч.1","/blog/python/st15","blog/python/st15",{"title":218,"path":219,"stem":220},"Использование списков ч.2","/blog/python/st16","blog/python/st16",{"title":222,"path":223,"stem":224},"Использование списков ч.3","/blog/python/st17","blog/python/st17",{"title":226,"path":227,"stem":228},"Словари","/blog/python/st18","blog/python/st18",{"title":230,"path":231,"stem":232},"Множества","/blog/python/st19","blog/python/st19",{"title":234,"path":235,"stem":236},"Переменные","/blog/python/st2","blog/python/st2",{"title":238,"path":239,"stem":240},"Хеш-таблицы","/blog/python/st20","blog/python/st20",{"title":242,"path":243,"stem":244},"Решето Эратосфена","/blog/python/st21","blog/python/st21",{"title":246,"path":247,"stem":248},"Длинная арифметика","/blog/python/st22","blog/python/st22",{"title":250,"path":251,"stem":252},"Декораторы функций","/blog/python/st23","blog/python/st23",{"title":254,"path":255,"stem":256},"Знакомство с алгоритмами","/blog/python/st24","blog/python/st24",{"title":258,"path":259,"stem":260},"Бинарный поиск – примеры задач","/blog/python/st25","blog/python/st25",{"title":262,"path":263,"stem":264},"Сортировка выбором","/blog/python/st26","blog/python/st26",{"title":266,"path":267,"stem":268},"Рекурсия и стек","/blog/python/st27","blog/python/st27",{"title":270,"path":271,"stem":272},"Быстрая сортировка","/blog/python/st28","blog/python/st28",{"title":274,"path":275,"stem":276},"Поиск в ширину","/blog/python/st29","blog/python/st29",{"title":278,"path":279,"stem":280},"Работа со строками","/blog/python/st3","blog/python/st3",{"title":282,"path":283,"stem":284},"Поиск в глубину","/blog/python/st30","blog/python/st30",{"title":286,"path":287,"stem":288},"Сбалансированные деревья","/blog/python/st31","blog/python/st31",{"title":290,"path":291,"stem":292},"Алгоритм Дейкстры","/blog/python/st32","blog/python/st32",{"title":294,"path":295,"stem":296},"Жадные алгоритмы","/blog/python/st33","blog/python/st33",{"title":298,"path":299,"stem":300},"Динамическое программирование","/blog/python/st34","blog/python/st34",{"title":302,"path":303,"stem":304},"Алгоритм k ближайших соседей","/blog/python/st35","blog/python/st35",{"title":306,"path":307,"stem":308},"Типы данных","/blog/python/st4","blog/python/st4",{"title":310,"path":311,"stem":312},"О функциях","/blog/python/st5","blog/python/st5",{"title":314,"path":315,"stem":316},"Свойства и методы","/blog/python/st6","blog/python/st6",{"title":318,"path":319,"stem":320},"Определение функций","/blog/python/st7","blog/python/st7",{"title":322,"path":323,"stem":324},"Логика","/blog/python/st8","blog/python/st8",{"title":326,"path":327,"stem":328},"Циклы","/blog/python/st9","blog/python/st9",{"title":330,"path":331,"stem":332,"children":333,"page":114},"Toi","/blog/toi","blog/toi",[334,338,342,346,350,354,358,362,366,370,374,378,382],{"title":335,"path":336,"stem":337},"Информация и информационные процессы","/blog/toi/st1","blog/toi/st1",{"title":339,"path":340,"stem":341},"Электронные таблицы","/blog/toi/st10","blog/toi/st10",{"title":343,"path":344,"stem":345},"Система, её свойства и компоненты. Моделирование","/blog/toi/st11","blog/toi/st11",{"title":347,"path":348,"stem":349},"Представление информации в компьютере","/blog/toi/st12","blog/toi/st12",{"title":351,"path":352,"stem":353},"Средства информационно-коммуникационных технологий. Файловая система","/blog/toi/st13","blog/toi/st13",{"title":355,"path":356,"stem":357},"Комбинаторика","/blog/toi/st2","blog/toi/st2",{"title":359,"path":360,"stem":361},"Адресация в интернете","/blog/toi/st3","blog/toi/st3",{"title":363,"path":364,"stem":365},"Измерение количества информации","/blog/toi/st4","blog/toi/st4",{"title":367,"path":368,"stem":369},"Системы счисления","/blog/toi/st5","blog/toi/st5",{"title":371,"path":372,"stem":373},"Диаграммы Эйлера — Венна","/blog/toi/st6","blog/toi/st6",{"title":375,"path":376,"stem":377},"Условие Фано","/blog/toi/st7","blog/toi/st7",{"title":379,"path":380,"stem":381},"Теория графов","/blog/toi/st8","blog/toi/st8",{"title":383,"path":384,"stem":385},"Алгебра логики","/blog/toi/st9","blog/toi/st9",{"id":387,"title":298,"author":388,"body":393,"date":3596,"description":3597,"extension":3598,"image":3599,"meta":3600,"minRead":3601,"navigation":3602,"num":3603,"path":299,"seo":3604,"stem":300,"__hash__":3605},"python/blog/python/st34.md",{"name":389,"avatar":390},"Штана Альберт Игоревич",{"src":391,"alt":392},"me.jpg","@ashtana",{"type":394,"value":395,"toc":3561},"minimark",[396,400,405,417,422,427,430,475,478,483,578,581,584,587,590,593,652,655,659,662,665,720,723,777,780,834,837,840,843,897,900,954,957,1012,1015,1018,1021,1075,1078,1133,1136,1191,1194,1198,1201,1205,1208,1262,1265,1333,1336,1402,1405,1472,1475,1479,1482,1486,1489,1493,1496,1607,1611,1614,1618,1621,1690,1693,1776,1779,1863,1867,1870,1952,1955,1958,1962,1965,1969,1972,1976,1979,1989,1992,2003,2007,2010,2014,2017,2028,2031,2101,2105,2108,2174,2177,2181,2184,2250,2253,2262,2265,2530,2533,2740,2743,2824,2827,2831,2834,2901,2904,2908,2911,2919,2922,2988,3055,3058,3280,3498,3501,3512,3515,3523,3525,3529,3532,3539,3551,3554,3558],[397,398,298],"h2",{"id":399},"динамическое-программирование",[401,402],"card-collapsible",{":isList":403,"title":404},"[\"Узнаете про динамическое программирование — метод решения сложных задач, разбиваемых на подзадачи, которые решаются в первую очередь.\",\"Рассматриваются примеры, которые научат вас искать решения новых задач, основанные на методе динамического программирования.\"]","Из этой статьи вы",[406,407,408],"blockquote",{},[409,410,411,412,416],"p",{},"В предыдущей статье было о: ",[413,414,415],"a",{"href":291},"жадных алгоритмах",".\nЗдесь далее текст пойдёт о динамическом программировании.",[418,419,421],"h3",{"id":420},"задача-о-рюкзаке","Задача о рюкзаке",[406,423,424],{},[409,425,426],{},"Задача о рюкзаке была описана в предыдущей статье.",[409,428,429],{},"Вернёмся к задаче о рюкзаке. У вас есть рюкзак, в котором можно унести товары общим весом до 4 кг.\nЕсть 3 предмета, которые можно положить в рюкзак.",[431,432,433,449],"table",{},[434,435,436],"thead",{},[437,438,439,443,446],"tr",{},[440,441,442],"th",{},"Магнитофон",[440,444,445],{},"Ноутбук",[440,447,448],{},"Гитара",[450,451,452,464],"tbody",{},[437,453,454,458,461],{},[455,456,457],"td",{},"3000 руб",[455,459,460],{},"2000 руб",[455,462,463],{},"1500 руб",[437,465,466,469,472],{},[455,467,468],{},"4 кг",[455,470,471],{},"3 кг",[455,473,474],{},"1 кг",[409,476,477],{},"Какие предметы следует положить в рюкзак, чтобы стоимость добычи была максимальной?",[479,480,482],"h4",{"id":481},"простое-решение","Простое решение",[409,484,485,486,577],{},"Простой способ решения выглядит так: вы перебираете все возможные множества товаров и находите множество с максимальной стоимостью.\nТакое решение работает очень медленно. Для 3 предметов приходится обработать 8 множеств, для 4 — 16 и т.д.\nС каждым добавленным предметом количество множеств удваивается. Такое решение будет выполняться за время: ",[487,488,492],"mjx-container",{"className":489,"jax":491},[490],"MathJax","SVG",[493,494,503,527],"svg",{"style":495,"xmlns":496,"width":497,"height":498,"role":499,"focusable":500,"viewBox":501,"xmlnsXLink":502},"vertical-align: -0.566ex;","http://www.w3.org/2000/svg","5.765ex","2.262ex","img","false","0 -750 2548.3 1000","http://www.w3.org/1999/xlink",[504,505,506,511,515,519,523],"defs",{},[507,508],"path",{"id":509,"d":510},"MJX-1-TEX-I-1D442","M740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476Z",[507,512],{"id":513,"d":514},"MJX-1-TEX-N-28","M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z",[507,516],{"id":517,"d":518},"MJX-1-TEX-N-32","M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z",[507,520],{"id":521,"d":522},"MJX-1-TEX-I-1D45B","M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",[507,524],{"id":525,"d":526},"MJX-1-TEX-N-29","M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z",[528,529,533],"g",{"stroke":530,"fill":530,"stroke-width":531,"transform":532},"currentColor","0","scale(1,-1)",[528,534,536,544,552,570],{"dataMmlNode":535},"math",[528,537,539],{"dataMmlNode":538},"mi",[540,541],"use",{"dataC":542,"xLinkHref":543},"1D442","#MJX-1-TEX-I-1D442",[528,545,548],{"dataMmlNode":546,"transform":547},"mo","translate(763,0)",[540,549],{"dataC":550,"xLinkHref":551},"28","#MJX-1-TEX-N-28",[528,553,556,563],{"dataMmlNode":554,"transform":555},"msup","translate(1152,0)",[528,557,559],{"dataMmlNode":558},"mn",[540,560],{"dataC":561,"xLinkHref":562},"32","#MJX-1-TEX-N-32",[528,564,566],{"dataMmlNode":538,"transform":565},"translate(533,363) scale(0.707)",[540,567],{"dataC":568,"xLinkHref":569},"1D45B","#MJX-1-TEX-I-1D45B",[528,571,573],{"dataMmlNode":546,"transform":572},"translate(2159.3,0)",[540,574],{"dataC":575,"xLinkHref":576},"29","#MJX-1-TEX-N-29",".\nЭто слишком медленно!",[409,579,580],{},"Для любого сколько-нибудь значительного количества предметов это неприемлемо долго!\nМожно воспользоваться приближённым решением, но такое решение может существенно не совпадать с оптимальным.\nКак вычислить оптимальное решение? С помощью динамического программирования!",[418,582,298],{"id":583},"динамическое-программирование-1",[409,585,586],{},"Рассмотрим как работает данный способ решения задачи.\nПроцедура решения начинается с решения подзадач с постепенным переходом к решению полной задачи.\nВ задаче о рюкзаке начать следует с решения задачи для меньшего рюкзака(или \"подрюкзака\"), а потом на этой основе попытаться решить исходную задачу.",[409,588,589],{},"Динамическое программирование — достаточно сложная концепция.\nДополнительные примеры помогут вам в дальнейшем лучше разобраться с этой темой.",[409,591,592],{},"Для начала рассмотрим алгоритм в действии.\nКаждый алгоритм динамического программирования начинается с таблицы. Вот как выглядит таблица для задачи о рюкзаке:",[431,594,595,614],{},[434,596,597],{},[437,598,599,602,605,608,611],{},[440,600,601],{},"-",[440,603,604],{},"1",[440,606,607],{},"2",[440,609,610],{},"3",[440,612,613],{},"4",[450,615,616,628,640],{},[437,617,618,620,622,624,626],{},[455,619,448],{},[455,621],{},[455,623],{},[455,625],{},[455,627],{},[437,629,630,632,634,636,638],{},[455,631,442],{},[455,633],{},[455,635],{},[455,637],{},[455,639],{},[437,641,642,644,646,648,650],{},[455,643,445],{},[455,645],{},[455,647],{},[455,649],{},[455,651],{},[409,653,654],{},"Строки таблицы представляют предметы, а столбцы — ёмкость рюкзака от 1 до 4 кг.\nВсе эти столбы нужны, потому что они упрощают вычисление стоимостей \"подкрюкзаков\".\nВ исходном состоянии таблица пуста. Нам предстоит заполнить каждую ячейку таблицы.\nПосле того как таблица будет заполнена, вы получите ответ на свою задачу.\nПожалуйста, внимательно разберитесь в происходящем. Нарисуйте собственную таблицу.",[656,657,448],"h5",{"id":658},"гитара",[409,660,661],{},"Точная формула для вычисления значений в таблице будет приведена позднее, а пока ограничимся общим описанием.\nНачнём с первой строки.\nСтрока снабжена пометкой «гитара»; это означает, что вы пытаетесь уложить гитару в рюкзак.\nВ каждой ячейке принимается простое решение:класть гитару в рюкзак или нет?\nПомните: мы пытаемся найти множество элементов с максимальной стоимостью.",[409,663,664],{},"В первой ячейке емкость рюкзака равна 1 кг. Гитара также весит 1 кг — значит, она поместится в рюкзак!\nИтак, стоимость этой ячейки составляет 1500₽, а в рюкзаке лежит гитара.\nНачнем заполнять ячейку:",[431,666,667,681],{},[434,668,669],{},[437,670,671,673,675,677,679],{},[440,672,601],{},[440,674,604],{},[440,676,607],{},[440,678,610],{},[440,680,613],{},[450,682,683,696,708],{},[437,684,685,687,690,692,694],{},[455,686,448],{},[455,688,689],{},"1500",[455,691],{},[455,693],{},[455,695],{},[437,697,698,700,702,704,706],{},[455,699,442],{},[455,701],{},[455,703],{},[455,705],{},[455,707],{},[437,709,710,712,714,716,718],{},[455,711,445],{},[455,713],{},[455,715],{},[455,717],{},[455,719],{},[409,721,722],{},"По тому же принципу каждая ячейка в таблице содержит список всех элементов, которые помещаются в рюкзаке на данный момент.\nПосмотрим на следующую ячейку. На этот раз емкость рюкзака составляет 2 кг. Понятно, что гитара здесь поместится!",[431,724,725,739],{},[434,726,727],{},[437,728,729,731,733,735,737],{},[440,730,601],{},[440,732,604],{},[440,734,607],{},[440,736,610],{},[440,738,613],{},[450,740,741,753,765],{},[437,742,743,745,747,749,751],{},[455,744,448],{},[455,746,689],{},[455,748,689],{},[455,750],{},[455,752],{},[437,754,755,757,759,761,763],{},[455,756,442],{},[455,758],{},[455,760],{},[455,762],{},[455,764],{},[437,766,767,769,771,773,775],{},[455,768,445],{},[455,770],{},[455,772],{},[455,774],{},[455,776],{},[409,778,779],{},"Процедура повторяется для остальных ячеек строки.\nВспомните, что текущей является первая строка, поэтому выбирать приходится только из одного предмета — гитары.\nСчитайте, что два других предмета пока недоступны.\nПочему все это делается для рюкзаков с емкостью 1, 2 и т.д., если в задаче речь идет о рюкзаке с емкостью 4 кг?\nМетод динамического программирования начинает с малых задач, а затем переходит к большой задаче.\nВы решаете подзадачи, которые помогут в решении большой задачи.\nПосле того как первая строка будет заполнена, таблица будет выглядеть так:",[431,781,782,796],{},[434,783,784],{},[437,785,786,788,790,792,794],{},[440,787,601],{},[440,789,604],{},[440,791,607],{},[440,793,610],{},[440,795,613],{},[450,797,798,810,822],{},[437,799,800,802,804,806,808],{},[455,801,448],{},[455,803,689],{},[455,805,689],{},[455,807,689],{},[455,809,689],{},[437,811,812,814,816,818,820],{},[455,813,442],{},[455,815],{},[455,817],{},[455,819],{},[455,821],{},[437,823,824,826,828,830,832],{},[455,825,445],{},[455,827],{},[455,829],{},[455,831],{},[455,833],{},[409,835,836],{},"Помните, что мы стремимся обеспечить максимальную стоимость предметов в рюкзаке.\nЭта строка представляет текущую лучшую оценку максимума.\nИтак, на данный момент из этой строки следует, что для рюкзака с емкостью 4 кг максимальная стоимость предметов составит 1500₽.\nЭто решение неокончательно. В процессе работы алгоритма оценка будет уточняться.",[656,838,442],{"id":839},"магнитофон",[409,841,842],{},"Займемся следующей строкой, которая относится к магнитофону.\nТеперь, когда вы перешли ко второй строке, появляется выбор между магнитофоном и гитарой.\nВ каждой строке можно взять предмет этой строки или предметы, находящиеся в верхних строках.\nТаким образом, сейчас нельзя выбрать ноутбук, но можно выбрать магнитофон и/или гитару.\nНачнем с первой ячейки (рюкзак с емкостью 1 кг).\nТекущая максимальная стоимость предметов, которые можно положить в рюкзак с емкостью 1 кг, составляет 1500₽.\nБрать магнитофон или нет?\nЕмкость рюкзака составляет 1 кг. Поместится туда магнитофон? Нет, он слишком тяжел!\nТак как магнитофон не помещается в рюкзак, максимальная оценка для 1-кг рюкзака остается равной 1500₽.",[431,844,845,859],{},[434,846,847],{},[437,848,849,851,853,855,857],{},[440,850,601],{},[440,852,604],{},[440,854,607],{},[440,856,610],{},[440,858,613],{},[450,860,861,873,885],{},[437,862,863,865,867,869,871],{},[455,864,448],{},[455,866,689],{},[455,868,689],{},[455,870,689],{},[455,872,689],{},[437,874,875,877,879,881,883],{},[455,876,442],{},[455,878,689],{},[455,880],{},[455,882],{},[455,884],{},[437,886,887,889,891,893,895],{},[455,888,445],{},[455,890],{},[455,892],{},[455,894],{},[455,896],{},[409,898,899],{},"То же самое происходит со следующими двумя клетками.\nЕмкость этих рюкзаков составляет 2 и 3 кг соответственно.\nМаксимальная стоимость для обеих ячеек была равна 1500₽.",[431,901,902,916],{},[434,903,904],{},[437,905,906,908,910,912,914],{},[440,907,601],{},[440,909,604],{},[440,911,607],{},[440,913,610],{},[440,915,613],{},[450,917,918,930,942],{},[437,919,920,922,924,926,928],{},[455,921,448],{},[455,923,689],{},[455,925,689],{},[455,927,689],{},[455,929,689],{},[437,931,932,934,936,938,940],{},[455,933,442],{},[455,935,689],{},[455,937,689],{},[455,939,689],{},[455,941],{},[437,943,944,946,948,950,952],{},[455,945,445],{},[455,947],{},[455,949],{},[455,951],{},[455,953],{},[409,955,956],{},"Магнитофон все равно не помещается, так что оценка остается неизменной.\nА если емкость рюкзака увеличивается до 4 кг?\nАга, магнитофон наконец-то войдет в рюкзак!\nСтарая максимальная стоимость была равна 1500₽, но если вместо гитары положить магнитофон, она увеличится до 3000₽!\nБерем магнитофон.",[431,958,959,973],{},[434,960,961],{},[437,962,963,965,967,969,971],{},[440,964,601],{},[440,966,604],{},[440,968,607],{},[440,970,610],{},[440,972,613],{},[450,974,975,987,1000],{},[437,976,977,979,981,983,985],{},[455,978,448],{},[455,980,689],{},[455,982,689],{},[455,984,689],{},[455,986,689],{},[437,988,989,991,993,995,997],{},[455,990,442],{},[455,992,689],{},[455,994,689],{},[455,996,689],{},[455,998,999],{},"3000",[437,1001,1002,1004,1006,1008,1010],{},[455,1003,445],{},[455,1005],{},[455,1007],{},[455,1009],{},[455,1011],{},[409,1013,1014],{},"Оценка только что обновилась! Имея рюкзак емкостью 4 кг, вы можете положить в него товары стоимостью по крайней мере 3000₽.\nИз таблицы видно, что оценка постепенно возрастает.",[656,1016,445],{"id":1017},"ноутбук",[409,1019,1020],{},"А теперь проделаем то же для ноутбука! Ноутбук весит 3 кг, поэтому он не поместится в рюкзак с емкостью 1 или 2 кг.\nОценка для первых двух ячеек остается на уровне 1500₽.",[431,1022,1023,1037],{},[434,1024,1025],{},[437,1026,1027,1029,1031,1033,1035],{},[440,1028,601],{},[440,1030,604],{},[440,1032,607],{},[440,1034,610],{},[440,1036,613],{},[450,1038,1039,1051,1063],{},[437,1040,1041,1043,1045,1047,1049],{},[455,1042,448],{},[455,1044,689],{},[455,1046,689],{},[455,1048,689],{},[455,1050,689],{},[437,1052,1053,1055,1057,1059,1061],{},[455,1054,442],{},[455,1056,689],{},[455,1058,689],{},[455,1060,689],{},[455,1062,999],{},[437,1064,1065,1067,1069,1071,1073],{},[455,1066,445],{},[455,1068,689],{},[455,1070,689],{},[455,1072],{},[455,1074],{},[409,1076,1077],{},"Для 3 кг старая оценка составляла 1500₽.\nНо теперь вы можете выбрать ноутбук, который стоит 2000₽.\nСледовательно, новая максимальная оценка равна 2000₽!",[431,1079,1080,1094],{},[434,1081,1082],{},[437,1083,1084,1086,1088,1090,1092],{},[440,1085,601],{},[440,1087,604],{},[440,1089,607],{},[440,1091,610],{},[440,1093,613],{},[450,1095,1096,1108,1120],{},[437,1097,1098,1100,1102,1104,1106],{},[455,1099,448],{},[455,1101,689],{},[455,1103,689],{},[455,1105,689],{},[455,1107,689],{},[437,1109,1110,1112,1114,1116,1118],{},[455,1111,442],{},[455,1113,689],{},[455,1115,689],{},[455,1117,689],{},[455,1119,999],{},[437,1121,1122,1124,1126,1128,1131],{},[455,1123,445],{},[455,1125,689],{},[455,1127,689],{},[455,1129,1130],{},"2000",[455,1132],{},[409,1134,1135],{},"При 4 кг ситуация становится по-настоящему интересной. Это очень важная часть.\nВ настоящее время оценка составляет 3000₽.\nВ рюкзак можно положить ноутбук, но он стоит всего 2000₽.\nВ соответствии с последней оценкой в свободном месте емкостью в 1 кг можно разместить гитару стоимостью 1500₽.\nСледовательно, настоящее сравнение выглядит так: 3000₽(магнитофон) или (2000₽(ноутбук) + 1500₽(гитара)).\nЗачем мы вычисляем максимальную стоимость для рюкзаков меньшей емкости? Надеюсь, теперь всё ясно!\nЕсли в рюкзаке остается свободное место, вы можете использовать ответы на эти подзадачи для определения того, чем заполнить это пространство.\nВместо магнитофона лучше взять ноутбук + гитару за 3500₽.\nВ завершающем состоянии таблица выглядит так:",[431,1137,1138,1152],{},[434,1139,1140],{},[437,1141,1142,1144,1146,1148,1150],{},[440,1143,601],{},[440,1145,604],{},[440,1147,607],{},[440,1149,610],{},[440,1151,613],{},[450,1153,1154,1166,1178],{},[437,1155,1156,1158,1160,1162,1164],{},[455,1157,448],{},[455,1159,689],{},[455,1161,689],{},[455,1163,689],{},[455,1165,689],{},[437,1167,1168,1170,1172,1174,1176],{},[455,1169,442],{},[455,1171,689],{},[455,1173,689],{},[455,1175,689],{},[455,1177,999],{},[437,1179,1180,1182,1184,1186,1188],{},[455,1181,445],{},[455,1183,689],{},[455,1185,689],{},[455,1187,1130],{},[455,1189,1190],{},"3500",[409,1192,1193],{},"Итак, мы получили ответ: максимальная стоимость товаров, которые поместятся в рюкзак, равна 3500₽ — для гитары и ноутбука.\nСтоимость каждой ячейки вычисляется по постоянной формуле, которая выглядит так:\nмаксимум из предыдущего элемента или стоимость текущего элемента плюс стоимость оставшегося пространства.\nТаким образом, в данной задаче объединяется решение двух подзадач для решения ещё одной большей задачи.",[418,1195,1197],{"id":1196},"вопросы-по-задаче","Вопросы по задаче",[409,1199,1200],{},"Ответим на вопросы которую могут возникнуть.",[656,1202,1204],{"id":1203},"что-произойдет-при-добавлении-элемента","Что произойдет при добавлении элемента?",[409,1206,1207],{},"Представьте, что вы увидели четвертый предмет, который тоже можно засунуть в рюкзак!\nВместе со всем предыдущим добром можно также взять смартфон.\nПридется ли пересчитывать все заново с новым предметом? Нет.\nДинамическое программирование последовательно строит решение на основании вашей оценки.\nК настоящему моменту максимальные стоимости выглядят так:",[431,1209,1210,1224],{},[434,1211,1212],{},[437,1213,1214,1216,1218,1220,1222],{},[440,1215,601],{},[440,1217,604],{},[440,1219,607],{},[440,1221,610],{},[440,1223,613],{},[450,1225,1226,1238,1250],{},[437,1227,1228,1230,1232,1234,1236],{},[455,1229,448],{},[455,1231,689],{},[455,1233,689],{},[455,1235,689],{},[455,1237,689],{},[437,1239,1240,1242,1244,1246,1248],{},[455,1241,442],{},[455,1243,689],{},[455,1245,689],{},[455,1247,689],{},[455,1249,999],{},[437,1251,1252,1254,1256,1258,1260],{},[455,1253,445],{},[455,1255,689],{},[455,1257,689],{},[455,1259,1130],{},[455,1261,1190],{},[409,1263,1264],{},"Это означает, что в рюкзак с емкостью 4 кг можно упаковать товары стоимостью до 3500₽.\nДобавим новую строку для смартфона.",[431,1266,1267,1281],{},[434,1268,1269],{},[437,1270,1271,1273,1275,1277,1279],{},[440,1272,601],{},[440,1274,604],{},[440,1276,607],{},[440,1278,610],{},[440,1280,613],{},[450,1282,1283,1295,1307,1319],{},[437,1284,1285,1287,1289,1291,1293],{},[455,1286,448],{},[455,1288,689],{},[455,1290,689],{},[455,1292,689],{},[455,1294,689],{},[437,1296,1297,1299,1301,1303,1305],{},[455,1298,442],{},[455,1300,689],{},[455,1302,689],{},[455,1304,689],{},[455,1306,999],{},[437,1308,1309,1311,1313,1315,1317],{},[455,1310,445],{},[455,1312,689],{},[455,1314,689],{},[455,1316,1130],{},[455,1318,1190],{},[437,1320,1321,1324,1326,1328,1330],{},[455,1322,1323],{},"Смартфон",[455,1325],{},[455,1327],{},[455,1329],{},[455,1331,1332],{},"ответ",[409,1334,1335],{},"Оказывается, в таблице появляется новый максимум! Заполним последнюю строку.\nНачнем с первой ячейки. Смартфон сам по себе помещается в рюкзак с емкостью 1 кг.\nСтарый максимум был равен 1500₽, но Смартфон стоит 2000₽.\nЗначит, берем Смартфон.\nВ следующей далее можно разместить смартфон и гитару.",[431,1337,1338,1352],{},[434,1339,1340],{},[437,1341,1342,1344,1346,1348,1350],{},[440,1343,601],{},[440,1345,604],{},[440,1347,607],{},[440,1349,610],{},[440,1351,613],{},[450,1353,1354,1366,1378,1390],{},[437,1355,1356,1358,1360,1362,1364],{},[455,1357,448],{},[455,1359,689],{},[455,1361,689],{},[455,1363,689],{},[455,1365,689],{},[437,1367,1368,1370,1372,1374,1376],{},[455,1369,442],{},[455,1371,689],{},[455,1373,689],{},[455,1375,689],{},[455,1377,999],{},[437,1379,1380,1382,1384,1386,1388],{},[455,1381,445],{},[455,1383,689],{},[455,1385,689],{},[455,1387,1130],{},[455,1389,1190],{},[437,1391,1392,1394,1396,1398,1400],{},[455,1393,1323],{},[455,1395,1130],{},[455,1397,1190],{},[455,1399],{},[455,1401],{},[409,1403,1404],{},"Для ячейки 3 ничего лучшего, чем снова взять смартфон вместе с гитарой, все равно не найдется.\nА вот в последней ячейке ситуация становится интересной. Текущий максимум до смартфона был равен 3500₽.\nСнова можно взять смартфон, и еще останется свободное место на 3 кг.\nНо эти 3 кг можно заполнить на 2000₽! 2000₽ от смартфона + 2000₽ из старой подзадачи: получается 4000₽. Новый максимум!\nВот как выглядит новая завершающая таблица:",[431,1406,1407,1421],{},[434,1408,1409],{},[437,1410,1411,1413,1415,1417,1419],{},[440,1412,601],{},[440,1414,604],{},[440,1416,607],{},[440,1418,610],{},[440,1420,613],{},[450,1422,1423,1435,1447,1459],{},[437,1424,1425,1427,1429,1431,1433],{},[455,1426,448],{},[455,1428,689],{},[455,1430,689],{},[455,1432,689],{},[455,1434,689],{},[437,1436,1437,1439,1441,1443,1445],{},[455,1438,442],{},[455,1440,689],{},[455,1442,689],{},[455,1444,689],{},[455,1446,999],{},[437,1448,1449,1451,1453,1455,1457],{},[455,1450,445],{},[455,1452,689],{},[455,1454,689],{},[455,1456,1130],{},[455,1458,1190],{},[437,1460,1461,1463,1465,1467,1469],{},[455,1462,1323],{},[455,1464,1130],{},[455,1466,1190],{},[455,1468,1190],{},[455,1470,1471],{},"4000",[409,1473,1474],{},"Вопрос: может ли значение в столбце уменьшиться? Ответ: нет. При каждой итерации сохраняется текущая оценка максимума.\nЭта оценка ни при каких условиях не может быть меньше предыдущей!",[656,1476,1478],{"id":1477},"что-произойдет-при-изменении-порядка-строк","Что произойдет при изменении порядка строк?",[409,1480,1481],{},"Допустим, строки заполняются в другом порядке: магнитофон, ноутбук, гитара.\nКак будет выглядеть таблица? Изменится ли ответ? Заполните таблицу самостоятельно и убедитесь — ответ не изменился.\nОтвет не зависит от порядка строк.",[656,1483,1485],{"id":1484},"можно-ли-заполнять-таблицу-по-столбцам-а-не-по-строкам","Можно ли заполнять таблицу по столбцам, а не по строкам?",[409,1487,1488],{},"В данной задаче это ни на что не влияет, но в других задачах возможны изменения.",[656,1490,1492],{"id":1491},"что-произойдет-при-добавлении-меньшего-элемента","Что произойдет при добавлении меньшего элемента?",[409,1494,1495],{},"Допустим, вы можете выбрать ожерелье, которое весит 0,5 кг и стоит 1000₽.\nИзначально наша структура таблицы предполагает, что все веса являются целыми числами.\nТеперь вы решаете взять ожерелье. Остается еще 3,5 кг.\nКакую максимальную стоимость можно разместить в объеме 3,5 кг? Неизвестно!\nМы вычисляли стоимость только для рюкзаков с емкостью 1, 2, 3 и 4 кг.\nТеперь придется определять стоимость для рюкзака на 3,5 кг.\nИз-за ожерелья приходится повысить точность представления весов, поэтому таблица должна измениться.",[431,1497,1498,1524],{},[434,1499,1500],{},[437,1501,1502,1504,1507,1509,1512,1514,1517,1519,1522],{},[440,1503,601],{},[440,1505,1506],{},"0.5",[440,1508,604],{},[440,1510,1511],{},"1.5",[440,1513,607],{},[440,1515,1516],{},"2.5",[440,1518,610],{},[440,1520,1521],{},"3.5",[440,1523,613],{},[450,1525,1526,1546,1566,1586],{},[437,1527,1528,1530,1532,1534,1536,1538,1540,1542,1544],{},[455,1529,448],{},[455,1531],{},[455,1533],{},[455,1535],{},[455,1537],{},[455,1539],{},[455,1541],{},[455,1543],{},[455,1545],{},[437,1547,1548,1550,1552,1554,1556,1558,1560,1562,1564],{},[455,1549,442],{},[455,1551],{},[455,1553],{},[455,1555],{},[455,1557],{},[455,1559],{},[455,1561],{},[455,1563],{},[455,1565],{},[437,1567,1568,1570,1572,1574,1576,1578,1580,1582,1584],{},[455,1569,445],{},[455,1571],{},[455,1573],{},[455,1575],{},[455,1577],{},[455,1579],{},[455,1581],{},[455,1583],{},[455,1585],{},[437,1587,1588,1591,1593,1595,1597,1599,1601,1603,1605],{},[455,1589,1590],{},"Ожерелье",[455,1592],{},[455,1594],{},[455,1596],{},[455,1598],{},[455,1600],{},[455,1602],{},[455,1604],{},[455,1606],{},[656,1608,1610],{"id":1609},"можно-ли-взять-часть-предмета","Можно ли взять часть предмета?",[409,1612,1613],{},"Допустим, вы наполняете рюкзак в продуктовом магазине. Вы можете взять мешки с чечевицей и рисом.\nЕсли весь мешок не помещается, его можно открыть и отсыпать столько, сколько унесете.\nВ этом случае вы уже не действуете по принципу «все или ничего» — можно взять только часть предмета.\nКак решить такую задачу методом динамического программирования?\nОтвет: никак. В решении, полученном методом динамического программирования, вы либо берете предмет, либо не берете.\nАлгоритм не предусматривает возможности взять половину предмета.\nОднако проблема легко решается с помощью жадного алгоритма!\nСначала вы берете самый ценный предмет — настолько бóльшую его часть, насколько возможно.\nКогда самый ценный предмет будет исчерпан, вы берете максимально возможную часть следующего по ценности предмета и т.д.",[479,1615,1617],{"id":1616},"оптимизация-туристического-маршрута","Оптимизация туристического маршрута",[409,1619,1620],{},"Представьте, что вы приехали в Лондон на выходные. У вас два дня, а мест, которые хочется посетить, слишком много.\nПобывать везде не получится, поэтому вы составляете список.\nДля каждой достопримечательности, которую вы захотите увидеть, вы указываете, сколько времени займет осмотр и насколько сильно вы хотите ее увидеть.\nСможете ли вы построить оптимальный туристический маршрут на основании этого списка?\nДа это все та же задача о рюкзаке! Вместо ограниченной емкости рюкзака — ограниченное время.\nВместо магнитофонов и ноутбуков — список мест, которые вы хотите посетить.",[431,1622,1623,1636],{},[434,1624,1625],{},[437,1626,1627,1630,1633],{},[440,1628,1629],{},"Достопримечательность",[440,1631,1632],{},"Время",[440,1634,1635],{},"Оценка",[450,1637,1638,1649,1660,1670,1680],{},[437,1639,1640,1643,1646],{},[455,1641,1642],{},"Вестминстерское аббатство",[455,1644,1645],{},"1/2 дня",[455,1647,1648],{},"7",[437,1650,1651,1654,1657],{},[455,1652,1653],{},"Национальная галерея",[455,1655,1656],{},"1 день",[455,1658,1659],{},"9",[437,1661,1662,1665,1667],{},[455,1663,1664],{},"Театр",[455,1666,1645],{},[455,1668,1669],{},"6",[437,1671,1672,1675,1678],{},[455,1673,1674],{},"Музей",[455,1676,1677],{},"2 дня",[455,1679,1659],{},[437,1681,1682,1685,1687],{},[455,1683,1684],{},"Собор св. Павла",[455,1686,1645],{},[455,1688,1689],{},"8",[409,1691,1692],{},"Нарисуйте таблицу динамического программирования для списка, прежде чем двигаться дальше.\nВот как должна выглядеть эта таблица:",[431,1694,1695,1711],{},[434,1696,1697],{},[437,1698,1699,1701,1704,1706,1709],{},[440,1700,601],{},[440,1702,1703],{},"1/2",[440,1705,604],{},[440,1707,1708],{},"1 1/2",[440,1710,607],{},[450,1712,1713,1726,1738,1751,1763],{},[437,1714,1715,1718,1720,1722,1724],{},[455,1716,1717],{},"Вестминистер",[455,1719],{},[455,1721],{},[455,1723],{},[455,1725],{},[437,1727,1728,1730,1732,1734,1736],{},[455,1729,1664],{},[455,1731],{},[455,1733],{},[455,1735],{},[455,1737],{},[437,1739,1740,1743,1745,1747,1749],{},[455,1741,1742],{},"Галерея",[455,1744],{},[455,1746],{},[455,1748],{},[455,1750],{},[437,1752,1753,1755,1757,1759,1761],{},[455,1754,1674],{},[455,1756],{},[455,1758],{},[455,1760],{},[455,1762],{},[437,1764,1765,1768,1770,1772,1774],{},[455,1766,1767],{},"Собор",[455,1769],{},[455,1771],{},[455,1773],{},[455,1775],{},[409,1777,1778],{},"Вы изобразили ее правильно? Теперь заполните. Какие достопримечательности вы выберете? Ответ: аббатство, галерея, собор.",[431,1780,1781,1795],{},[434,1782,1783],{},[437,1784,1785,1787,1789,1791,1793],{},[440,1786,601],{},[440,1788,1703],{},[440,1790,604],{},[440,1792,1708],{},[440,1794,607],{},[450,1796,1797,1809,1822,1836,1848],{},[437,1798,1799,1801,1803,1805,1807],{},[455,1800,1717],{},[455,1802,1648],{},[455,1804,1648],{},[455,1806,1648],{},[455,1808,1648],{},[437,1810,1811,1813,1815,1818,1820],{},[455,1812,1664],{},[455,1814,1648],{},[455,1816,1817],{},"13",[455,1819,1817],{},[455,1821,1817],{},[437,1823,1824,1826,1828,1830,1833],{},[455,1825,1742],{},[455,1827,1648],{},[455,1829,1817],{},[455,1831,1832],{},"16",[455,1834,1835],{},"22",[437,1837,1838,1840,1842,1844,1846],{},[455,1839,1674],{},[455,1841,1648],{},[455,1843,1817],{},[455,1845,1832],{},[455,1847,1835],{},[437,1849,1850,1852,1854,1857,1860],{},[455,1851,1767],{},[455,1853,1689],{},[455,1855,1856],{},"15",[455,1858,1859],{},"21",[455,1861,1862],{},"24",[656,1864,1866],{"id":1865},"взаимозависимые-элементы","Взаимозависимые элементы",[409,1868,1869],{},"Предположим, вы хотите посетить Париж и добавили в свой список пару элементов.",[431,1871,1872,1882],{},[434,1873,1874],{},[437,1875,1876,1878,1880],{},[440,1877,1629],{},[440,1879,1632],{},[440,1881,1635],{},[450,1883,1884,1892,1900,1908,1916,1924,1934,1943],{},[437,1885,1886,1888,1890],{},[455,1887,1642],{},[455,1889,1645],{},[455,1891,1648],{},[437,1893,1894,1896,1898],{},[455,1895,1653],{},[455,1897,1656],{},[455,1899,1659],{},[437,1901,1902,1904,1906],{},[455,1903,1664],{},[455,1905,1645],{},[455,1907,1669],{},[437,1909,1910,1912,1914],{},[455,1911,1674],{},[455,1913,1677],{},[455,1915,1659],{},[437,1917,1918,1920,1922],{},[455,1919,1684],{},[455,1921,1645],{},[455,1923,1689],{},[437,1925,1926,1929,1932],{},[455,1927,1928],{},"Эйфелева башня",[455,1930,1931],{},"1 1/2 дня",[455,1933,1689],{},[437,1935,1936,1939,1941],{},[455,1937,1938],{},"Лувр",[455,1940,1931],{},[455,1942,1659],{},[437,1944,1945,1948,1950],{},[455,1946,1947],{},"Нотр-дам",[455,1949,1931],{},[455,1951,1648],{},[409,1953,1954],{},"На их посещение потребуется много времени, потому что сначала придется приехать из Лондона в Париж.\nПереезд отнимает полдня. Если вы захотите посмотреть все 3 достопримечательности, осмотр займет 4,5 дня.\nНебольшая поправка: не обязательно приезжать в Париж ради каждой достопримечательности.\nПосле того как вы там окажетесь, каждый последующий элемент займет всего один день.\nСледовательно, потребуется 1 день на каждую достопримечательность + 1 день на переезды = 3,5 дня, а не 4,5.",[409,1956,1957],{},"Если вы положите Эйфелеву башню в свой «рюкзак», то Лувр станет «дешевле» — он займет всего 1 день вместо 1,5.\nКак смоделировать это обстоятельство в динамическом программировании? Ответ: никак.\nДинамическое программирование — мощный метод, способный решать подзадачи и использовать полученные ответы для решения большой задачи.\nДинамическое программирование работает только в том случае, если каждая подзадача автономна, то есть не зависит от других подзадач.\nИз этого следует, что учесть поездки в Париж в алгоритме динамического программирования не удастся.",[656,1959,1961],{"id":1960},"может-ли-оказаться-что-решение-требует-более-двух-подрюкзаков","Может ли оказаться, что решение требует более двух «подрюкзаков»?",[409,1963,1964],{},"Может оказаться, что в лучшем решении должны отбираться больше двух элементов.\nВ текущем варианте алгоритма объединяются не более двух «подрюкзаков» — больше двух их не бывает.\nОднако вполне возможно, что у этих «подрюкзаков» будут собственные «подрюкзаки».",[656,1966,1968],{"id":1967},"возможно-ли-что-при-лучшем-решении-в-рюкзаке-остается-пустое-место","Возможно ли, что при лучшем решении в рюкзаке остается пустое место?",[409,1970,1971],{},"Да. Представьте, что вы можете также положить в рюкзак бриллиант.\nБриллиант очень крупный: он весит целых 3,5 кг и стоит 1 миллиард долларов — намного больше, чем любые другие предметы.\nБезусловно, нужно брать именно его!\nНо в рюкзаке остается еще пустое место на 0,5 кг, и в нем ничего не поместится.",[479,1973,1975],{"id":1974},"выводы","Выводы",[409,1977,1978],{},"Мы рассмотрели одну задачу динамического программирования. Какие выводы из нее можно сделать?",[1980,1981,1982,1986],"ul",{},[1983,1984,1985],"li",{},"Динамическое программирование применяется для оптимизации какой-либо характеристики при заданных ограничениях. В задаче о рюкзаке требуется максимизировать стоимость отобранных предметов с ограничениями по емкости рюкзака.",[1983,1987,1988],{},"Динамическое программирование работает только в ситуациях, в которых задача может быть разбита на автономные подзадачи, не зависящие друг от друга.",[409,1990,1991],{},"Построить решение на базе динамического программирования бывает непросто. Несколько общих рекомендаций:",[1980,1993,1994,1997,2000],{},[1983,1995,1996],{},"в каждом решении из области динамического программирования строится таблица;",[1983,1998,1999],{},"значения ячеек таблицы обычно соответствуют оптимизируемой характеристике. Для задачи о рюкзаке значения представляли общую стоимость товаров;",[1983,2001,2002],{},"каждая ячейка представляет подзадачу, поэтому вы должны подумать о том, как разбить задачу на подзадачи. Это поможет вам определиться с осями.",[479,2004,2006],{"id":2005},"ещё-пример-задачи","Ещё пример задачи",[409,2008,2009],{},"Допустим, вы открыли сайт dictionary.com. Пользователь вводит слово, а сайт возвращает определение.\nНо если пользователь ввел несуществующее слово, нужно предположить, какое слово имелось в виду.\nАлексей ищет определение «fish», но он случайно ввел «hish». Такого слова в словаре нет, но зато у вас есть список похожих слов.\nКакое слово он хотел ввести на самом деле: fish или например, vista?",[656,2011,2013],{"id":2012},"построение-таблицы","Построение таблицы",[409,2015,2016],{},"Как должна выглядеть таблица для этой задачи? Вы должны ответить на следующие вопросы.",[1980,2018,2019,2022,2025],{},[1983,2020,2021],{},"Какие значения должны содержаться в ячейках?",[1983,2023,2024],{},"Как разбить эту задачу на подзадачи?",[1983,2026,2027],{},"Каков смысл осей таблицы?",[409,2029,2030],{},"В динамическом программировании вы пытаетесь максимизировать некоторую характеристику.\nВ данном случае ищется самая длинная подстрока, общая в двух словах.\nКакую общую подстроку содержат hish и fish? А как насчет hish и vista? Именно это требуется вычислить.\nКак говорилось ранее, значения в ячейках обычно представляют ту характеристику, которую вы пытаетесь оптимизировать.\nВероятно, в данном случае этой характеристикой будет число: длина самой длинной подстроки, общей для двух строк.\nКак разделить эту задачу на подзадачи? Например, можно заняться сравнением подстрок.\nВместо того чтобы сравнивать hish и fish, можно сначала сравнить his и fis.\nКаждая ячейка будет содержать длину самой длинной подстроки, общей для двух подстрок.\nТакое решение также подсказывает, что строками и столбцами таблицы, вероятно, будут два слова.\nА значит, таблица будет выглядеть примерно так:",[431,2032,2033,2050],{},[434,2034,2035],{},[437,2036,2037,2039,2042,2045,2048],{},[440,2038,601],{},[440,2040,2041],{},"H",[440,2043,2044],{},"I",[440,2046,2047],{},"S",[440,2049,2041],{},[450,2051,2052,2065,2077,2089],{},[437,2053,2054,2057,2059,2061,2063],{},[455,2055,2056],{},"F",[455,2058],{},[455,2060],{},[455,2062],{},[455,2064],{},[437,2066,2067,2069,2071,2073,2075],{},[455,2068,2044],{},[455,2070],{},[455,2072],{},[455,2074],{},[455,2076],{},[437,2078,2079,2081,2083,2085,2087],{},[455,2080,2047],{},[455,2082],{},[455,2084],{},[455,2086],{},[455,2088],{},[437,2090,2091,2093,2095,2097,2099],{},[455,2092,2041],{},[455,2094],{},[455,2096],{},[455,2098],{},[455,2100],{},[656,2102,2104],{"id":2103},"заполнение-таблицы","Заполнение таблицы",[409,2106,2107],{},"Сейчас вы уже достаточно хорошо представляете, как должна выглядеть таблица.\nПо какой формуле заполняются ячейки таблицы?\nМы можем немного упростить свою задачу, потому что уже знаем решение — у hish и fish имеется общая подстрока длины 3: ish.\nОднако этот факт ничего не говорит о том, какая формула должна использоваться.\nПо правде говоря, простого способа вычислить формулу для данного случая не существует.\nВам придется экспериментировать и искать работоспособное решение.\nИногда алгоритм предоставляет не точный рецепт, а основу, на которую вы наращиваете свою идею.\nПопробуйте предложить решение этой задачи самостоятельно. Часть таблицы выглядит так:",[431,2109,2110,2124],{},[434,2111,2112],{},[437,2113,2114,2116,2118,2120,2122],{},[440,2115,601],{},[440,2117,2041],{},[440,2119,2044],{},[440,2121,2047],{},[440,2123,2041],{},[450,2125,2126,2138,2150,2162],{},[437,2127,2128,2130,2132,2134,2136],{},[455,2129,2056],{},[455,2131,531],{},[455,2133,531],{},[455,2135],{},[455,2137],{},[437,2139,2140,2142,2144,2146,2148],{},[455,2141,2044],{},[455,2143],{},[455,2145],{},[455,2147],{},[455,2149],{},[437,2151,2152,2154,2156,2158,2160],{},[455,2153,2047],{},[455,2155],{},[455,2157],{},[455,2159,607],{},[455,2161,531],{},[437,2163,2164,2166,2168,2170,2172],{},[455,2165,2041],{},[455,2167],{},[455,2169],{},[455,2171],{},[455,2173,610],{},[409,2175,2176],{},"Попытайтесь вывести формулу самостоятельно, прежде чем продолжить читать.",[656,2178,2180],{"id":2179},"решение","Решение",[409,2182,2183],{},"Итоговая версия таблицы выглядит так:",[431,2185,2186,2200],{},[434,2187,2188],{},[437,2189,2190,2192,2194,2196,2198],{},[440,2191,601],{},[440,2193,2041],{},[440,2195,2044],{},[440,2197,2047],{},[440,2199,2041],{},[450,2201,2202,2214,2226,2238],{},[437,2203,2204,2206,2208,2210,2212],{},[455,2205,2056],{},[455,2207,531],{},[455,2209,531],{},[455,2211,531],{},[455,2213,531],{},[437,2215,2216,2218,2220,2222,2224],{},[455,2217,2044],{},[455,2219,531],{},[455,2221,604],{},[455,2223,531],{},[455,2225,531],{},[437,2227,2228,2230,2232,2234,2236],{},[455,2229,2047],{},[455,2231,531],{},[455,2233,531],{},[455,2235,607],{},[455,2237,531],{},[437,2239,2240,2242,2244,2246,2248],{},[455,2241,2041],{},[455,2243,604],{},[455,2245,531],{},[455,2247,531],{},[455,2249,610],{},[409,2251,2252],{},"Формула заполнения ячеек:",[2254,2255,2256,2259],"ol",{},[1983,2257,2258],{},"Если буквы не совпадают, значение равно 0;",[1983,2260,2261],{},"Если буквы совпадают, то значение равно значению ячейки наверху слева +1.",[409,2263,2264],{},"На Python эта формула реализуется так:",[2266,2267,2272],"pre",{"className":2268,"code":2269,"language":2270,"meta":2271,"style":2271},"language-python shiki shiki-themes github-light","dp_table_hish = [\"h\", \"i\", \"s\", \"h\"]\ndp_table_fish = [\"f\", \"i\", \"s\", \"h\"]\ndp_table = [[0 for i in range(len(dp_table_hish))] for i in range(len(dp_table_fish))]\nfor i in range(0, len(dp_table_fish)):\n    for j in range(0, len(dp_table_hish)):\n        if dp_table_hish[j] == dp_table_fish[i]:  # Буквы совпадают\n            dp_table[i][j] = dp_table[i-1][j-1] + 1\n        else:  # Буквы не совпали\n            dp_table[i][j] = 0\nfor i in dp_table:\n    print(i)\n","python","",[2273,2274,2275,2313,2340,2391,2413,2437,2456,2487,2499,2509,2521],"code",{"__ignoreMap":2271},[2276,2277,2280,2284,2288,2291,2295,2298,2301,2303,2306,2308,2310],"span",{"class":2278,"line":2279},"line",1,[2276,2281,2283],{"class":2282},"sgsFI","dp_table_hish ",[2276,2285,2287],{"class":2286},"sD7c4","=",[2276,2289,2290],{"class":2282}," [",[2276,2292,2294],{"class":2293},"sYBdl","\"h\"",[2276,2296,2297],{"class":2282},", ",[2276,2299,2300],{"class":2293},"\"i\"",[2276,2302,2297],{"class":2282},[2276,2304,2305],{"class":2293},"\"s\"",[2276,2307,2297],{"class":2282},[2276,2309,2294],{"class":2293},[2276,2311,2312],{"class":2282},"]\n",[2276,2314,2316,2319,2321,2323,2326,2328,2330,2332,2334,2336,2338],{"class":2278,"line":2315},2,[2276,2317,2318],{"class":2282},"dp_table_fish ",[2276,2320,2287],{"class":2286},[2276,2322,2290],{"class":2282},[2276,2324,2325],{"class":2293},"\"f\"",[2276,2327,2297],{"class":2282},[2276,2329,2300],{"class":2293},[2276,2331,2297],{"class":2282},[2276,2333,2305],{"class":2293},[2276,2335,2297],{"class":2282},[2276,2337,2294],{"class":2293},[2276,2339,2312],{"class":2282},[2276,2341,2343,2346,2348,2351,2354,2357,2360,2363,2366,2369,2372,2375,2378,2380,2382,2384,2386,2388],{"class":2278,"line":2342},3,[2276,2344,2345],{"class":2282},"dp_table ",[2276,2347,2287],{"class":2286},[2276,2349,2350],{"class":2282}," [[",[2276,2352,531],{"class":2353},"sYu0t",[2276,2355,2356],{"class":2286}," for",[2276,2358,2359],{"class":2282}," i ",[2276,2361,2362],{"class":2286},"in",[2276,2364,2365],{"class":2353}," range",[2276,2367,2368],{"class":2282},"(",[2276,2370,2371],{"class":2353},"len",[2276,2373,2374],{"class":2282},"(dp_table_hish))] ",[2276,2376,2377],{"class":2286},"for",[2276,2379,2359],{"class":2282},[2276,2381,2362],{"class":2286},[2276,2383,2365],{"class":2353},[2276,2385,2368],{"class":2282},[2276,2387,2371],{"class":2353},[2276,2389,2390],{"class":2282},"(dp_table_fish))]\n",[2276,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410],{"class":2278,"line":2393},4,[2276,2395,2377],{"class":2286},[2276,2397,2359],{"class":2282},[2276,2399,2362],{"class":2286},[2276,2401,2365],{"class":2353},[2276,2403,2368],{"class":2282},[2276,2405,531],{"class":2353},[2276,2407,2297],{"class":2282},[2276,2409,2371],{"class":2353},[2276,2411,2412],{"class":2282},"(dp_table_fish)):\n",[2276,2414,2416,2419,2422,2424,2426,2428,2430,2432,2434],{"class":2278,"line":2415},5,[2276,2417,2418],{"class":2286},"    for",[2276,2420,2421],{"class":2282}," j ",[2276,2423,2362],{"class":2286},[2276,2425,2365],{"class":2353},[2276,2427,2368],{"class":2282},[2276,2429,531],{"class":2353},[2276,2431,2297],{"class":2282},[2276,2433,2371],{"class":2353},[2276,2435,2436],{"class":2282},"(dp_table_hish)):\n",[2276,2438,2440,2443,2446,2449,2452],{"class":2278,"line":2439},6,[2276,2441,2442],{"class":2286},"        if",[2276,2444,2445],{"class":2282}," dp_table_hish[j] ",[2276,2447,2448],{"class":2286},"==",[2276,2450,2451],{"class":2282}," dp_table_fish[i]:  ",[2276,2453,2455],{"class":2454},"sAwPA","# Буквы совпадают\n",[2276,2457,2459,2462,2464,2467,2469,2471,2474,2476,2478,2481,2484],{"class":2278,"line":2458},7,[2276,2460,2461],{"class":2282},"            dp_table[i][j] ",[2276,2463,2287],{"class":2286},[2276,2465,2466],{"class":2282}," dp_table[i",[2276,2468,601],{"class":2286},[2276,2470,604],{"class":2353},[2276,2472,2473],{"class":2282},"][j",[2276,2475,601],{"class":2286},[2276,2477,604],{"class":2353},[2276,2479,2480],{"class":2282},"] ",[2276,2482,2483],{"class":2286},"+",[2276,2485,2486],{"class":2353}," 1\n",[2276,2488,2490,2493,2496],{"class":2278,"line":2489},8,[2276,2491,2492],{"class":2286},"        else",[2276,2494,2495],{"class":2282},":  ",[2276,2497,2498],{"class":2454},"# Буквы не совпали\n",[2276,2500,2502,2504,2506],{"class":2278,"line":2501},9,[2276,2503,2461],{"class":2282},[2276,2505,2287],{"class":2286},[2276,2507,2508],{"class":2353}," 0\n",[2276,2510,2512,2514,2516,2518],{"class":2278,"line":2511},10,[2276,2513,2377],{"class":2286},[2276,2515,2359],{"class":2282},[2276,2517,2362],{"class":2286},[2276,2519,2520],{"class":2282}," dp_table:\n",[2276,2522,2524,2527],{"class":2278,"line":2523},11,[2276,2525,2526],{"class":2353},"    print",[2276,2528,2529],{"class":2282},"(i)\n",[409,2531,2532],{},"Аналогично для строк hish и vista:",[2266,2534,2536],{"className":2268,"code":2535,"language":2270,"meta":2271,"style":2271},"dp_table_hish = [\"h\", \"i\", \"s\", \"h\"]\ndp_table_vista = [\"v\", \"i\", \"s\", \"t\", \"a\"]\ndp_table = [[0 for i in range(len(dp_table_hish))] for i in range(len(dp_table_vista))]\nfor i in range(0, len(dp_table_vista)):\n    for j in range(0, len(dp_table_hish)):\n        if dp_table_hish[j] == dp_table_vista[i]:\n            dp_table[i][j] = dp_table[i-1][j-1] + 1\n        else:\n            dp_table[i][j] = 0\nfor i in dp_table:\n    print(i)\n",[2273,2537,2538,2562,2594,2633,2654,2674,2685,2709,2716,2724,2734],{"__ignoreMap":2271},[2276,2539,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560],{"class":2278,"line":2279},[2276,2541,2283],{"class":2282},[2276,2543,2287],{"class":2286},[2276,2545,2290],{"class":2282},[2276,2547,2294],{"class":2293},[2276,2549,2297],{"class":2282},[2276,2551,2300],{"class":2293},[2276,2553,2297],{"class":2282},[2276,2555,2305],{"class":2293},[2276,2557,2297],{"class":2282},[2276,2559,2294],{"class":2293},[2276,2561,2312],{"class":2282},[2276,2563,2564,2567,2569,2571,2574,2576,2578,2580,2582,2584,2587,2589,2592],{"class":2278,"line":2315},[2276,2565,2566],{"class":2282},"dp_table_vista ",[2276,2568,2287],{"class":2286},[2276,2570,2290],{"class":2282},[2276,2572,2573],{"class":2293},"\"v\"",[2276,2575,2297],{"class":2282},[2276,2577,2300],{"class":2293},[2276,2579,2297],{"class":2282},[2276,2581,2305],{"class":2293},[2276,2583,2297],{"class":2282},[2276,2585,2586],{"class":2293},"\"t\"",[2276,2588,2297],{"class":2282},[2276,2590,2591],{"class":2293},"\"a\"",[2276,2593,2312],{"class":2282},[2276,2595,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630],{"class":2278,"line":2342},[2276,2597,2345],{"class":2282},[2276,2599,2287],{"class":2286},[2276,2601,2350],{"class":2282},[2276,2603,531],{"class":2353},[2276,2605,2356],{"class":2286},[2276,2607,2359],{"class":2282},[2276,2609,2362],{"class":2286},[2276,2611,2365],{"class":2353},[2276,2613,2368],{"class":2282},[2276,2615,2371],{"class":2353},[2276,2617,2374],{"class":2282},[2276,2619,2377],{"class":2286},[2276,2621,2359],{"class":2282},[2276,2623,2362],{"class":2286},[2276,2625,2365],{"class":2353},[2276,2627,2368],{"class":2282},[2276,2629,2371],{"class":2353},[2276,2631,2632],{"class":2282},"(dp_table_vista))]\n",[2276,2634,2635,2637,2639,2641,2643,2645,2647,2649,2651],{"class":2278,"line":2393},[2276,2636,2377],{"class":2286},[2276,2638,2359],{"class":2282},[2276,2640,2362],{"class":2286},[2276,2642,2365],{"class":2353},[2276,2644,2368],{"class":2282},[2276,2646,531],{"class":2353},[2276,2648,2297],{"class":2282},[2276,2650,2371],{"class":2353},[2276,2652,2653],{"class":2282},"(dp_table_vista)):\n",[2276,2655,2656,2658,2660,2662,2664,2666,2668,2670,2672],{"class":2278,"line":2415},[2276,2657,2418],{"class":2286},[2276,2659,2421],{"class":2282},[2276,2661,2362],{"class":2286},[2276,2663,2365],{"class":2353},[2276,2665,2368],{"class":2282},[2276,2667,531],{"class":2353},[2276,2669,2297],{"class":2282},[2276,2671,2371],{"class":2353},[2276,2673,2436],{"class":2282},[2276,2675,2676,2678,2680,2682],{"class":2278,"line":2439},[2276,2677,2442],{"class":2286},[2276,2679,2445],{"class":2282},[2276,2681,2448],{"class":2286},[2276,2683,2684],{"class":2282}," dp_table_vista[i]:\n",[2276,2686,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707],{"class":2278,"line":2458},[2276,2688,2461],{"class":2282},[2276,2690,2287],{"class":2286},[2276,2692,2466],{"class":2282},[2276,2694,601],{"class":2286},[2276,2696,604],{"class":2353},[2276,2698,2473],{"class":2282},[2276,2700,601],{"class":2286},[2276,2702,604],{"class":2353},[2276,2704,2480],{"class":2282},[2276,2706,2483],{"class":2286},[2276,2708,2486],{"class":2353},[2276,2710,2711,2713],{"class":2278,"line":2489},[2276,2712,2492],{"class":2286},[2276,2714,2715],{"class":2282},":\n",[2276,2717,2718,2720,2722],{"class":2278,"line":2501},[2276,2719,2461],{"class":2282},[2276,2721,2287],{"class":2286},[2276,2723,2508],{"class":2353},[2276,2725,2726,2728,2730,2732],{"class":2278,"line":2511},[2276,2727,2377],{"class":2286},[2276,2729,2359],{"class":2282},[2276,2731,2362],{"class":2286},[2276,2733,2520],{"class":2282},[2276,2735,2736,2738],{"class":2278,"line":2523},[2276,2737,2526],{"class":2353},[2276,2739,2529],{"class":2282},[409,2741,2742],{},"Таблица:",[431,2744,2745,2759],{},[434,2746,2747],{},[437,2748,2749,2751,2753,2755,2757],{},[440,2750,601],{},[440,2752,2041],{},[440,2754,2044],{},[440,2756,2047],{},[440,2758,2041],{},[450,2760,2761,2774,2786,2798,2811],{},[437,2762,2763,2766,2768,2770,2772],{},[455,2764,2765],{},"V",[455,2767,531],{},[455,2769,531],{},[455,2771,531],{},[455,2773,531],{},[437,2775,2776,2778,2780,2782,2784],{},[455,2777,2044],{},[455,2779,531],{},[455,2781,604],{},[455,2783,531],{},[455,2785,531],{},[437,2787,2788,2790,2792,2794,2796],{},[455,2789,2047],{},[455,2791,531],{},[455,2793,531],{},[455,2795,607],{},[455,2797,531],{},[437,2799,2800,2803,2805,2807,2809],{},[455,2801,2802],{},"T",[455,2804,531],{},[455,2806,531],{},[455,2808,531],{},[455,2810,531],{},[437,2812,2813,2816,2818,2820,2822],{},[455,2814,2815],{},"A",[455,2817,531],{},[455,2819,531],{},[455,2821,531],{},[455,2823,531],{},[409,2825,2826],{},"Важный момент: в этой задаче окончательное решение далеко не всегда находится в последней ячейке!\nВ задаче о рюкзаке последняя ячейка всегда содержит окончательное решение.\nНо в задаче поиска самой длинной общей подстроки решение определяется самым большим числом в таблице — и это может быть не последняя, а какая-то другая ячейка.\nВернемся к исходному вопросу: какая строка ближе к hish? У строк hish и fish есть общая подстрока длиной в три буквы.\nУ hish и vista есть общая подстрока из двух букв. Скорее всего, Алексей хотел ввести строку fish.",[479,2828,2830],{"id":2829},"самая-длинная-общая-подпоследовательность","Самая длинная общая подпоследовательность",[409,2832,2833],{},"Предположим, Алексей ввел строку fosh. Какое слово он имел в виду: fish или fort?\nСравним строки, по способу выше, длину общей подстроки.\nОкажется, что длина подстрок одинакова: две буквы! Но fosh при этом ближе к fish.\nМы сравниваем самую длинную общую подстроку, а на самом деле нужно сравнивать самую длинную общую подпоследовательность: количество букв в последовательности, общих для двух слов.\nКак вычислить самую длинную общую подпоследовательность?\nНиже приведена частично заполненная таблица для fish и fosh:",[431,2835,2836,2851],{},[434,2837,2838],{},[437,2839,2840,2842,2844,2847,2849],{},[440,2841,601],{},[440,2843,2056],{},[440,2845,2846],{},"O",[440,2848,2047],{},[440,2850,2041],{},[450,2852,2853,2865,2877,2889],{},[437,2854,2855,2857,2859,2861,2863],{},[455,2856,2056],{},[455,2858,604],{},[455,2860,604],{},[455,2862],{},[455,2864],{},[437,2866,2867,2869,2871,2873,2875],{},[455,2868,2044],{},[455,2870,604],{},[455,2872],{},[455,2874],{},[455,2876],{},[437,2878,2879,2881,2883,2885,2887],{},[455,2880,2047],{},[455,2882],{},[455,2884,604],{},[455,2886,607],{},[455,2888,607],{},[437,2890,2891,2893,2895,2897,2899],{},[455,2892,2041],{},[455,2894],{},[455,2896],{},[455,2898],{},[455,2900],{},[409,2902,2903],{},"Сможете ли вы определить формулу для этой таблицы?\nСамая длинная общая подпоследовательность имеет много общего с самой длинной общей подстрокой, и их формулы тоже очень похожи.\nПопробуйте решить задачу самостоятельно.",[656,2905,2907],{"id":2906},"решение-самая-длинная-общая-подпоследовательность","Решение: самая длинная общая подпоследовательность",[409,2909,2910],{},"Формула для заполнения каждой ячейки(для соседелй наверху слева):",[2254,2912,2913,2916],{},[1983,2914,2915],{},"Если буквы не совпадают, выбрать большее значение;",[1983,2917,2918],{},"Если буквы совпадают, значение равно значению ячейки наверху слева +1 (как и в случае с самой длинной общей подстрокой).",[409,2920,2921],{},"Окончательные версии таблиц:",[431,2923,2924,2938],{},[434,2925,2926],{},[437,2927,2928,2930,2932,2934,2936],{},[440,2929,601],{},[440,2931,2056],{},[440,2933,2846],{},[440,2935,2047],{},[440,2937,2041],{},[450,2939,2940,2952,2964,2976],{},[437,2941,2942,2944,2946,2948,2950],{},[455,2943,2056],{},[455,2945,604],{},[455,2947,604],{},[455,2949,604],{},[455,2951,604],{},[437,2953,2954,2956,2958,2960,2962],{},[455,2955,2044],{},[455,2957,604],{},[455,2959,604],{},[455,2961,604],{},[455,2963,604],{},[437,2965,2966,2968,2970,2972,2974],{},[455,2967,2047],{},[455,2969,604],{},[455,2971,604],{},[455,2973,607],{},[455,2975,607],{},[437,2977,2978,2980,2982,2984,2986],{},[455,2979,2041],{},[455,2981,604],{},[455,2983,604],{},[455,2985,607],{},[455,2987,610],{},[431,2989,2990,3004],{},[434,2991,2992],{},[437,2993,2994,2996,2998,3000,3002],{},[440,2995,601],{},[440,2997,2056],{},[440,2999,2846],{},[440,3001,2047],{},[440,3003,2041],{},[450,3005,3006,3018,3030,3043],{},[437,3007,3008,3010,3012,3014,3016],{},[455,3009,2056],{},[455,3011,604],{},[455,3013,604],{},[455,3015,604],{},[455,3017,604],{},[437,3019,3020,3022,3024,3026,3028],{},[455,3021,2846],{},[455,3023,604],{},[455,3025,607],{},[455,3027,607],{},[455,3029,607],{},[437,3031,3032,3035,3037,3039,3041],{},[455,3033,3034],{},"R",[455,3036,604],{},[455,3038,607],{},[455,3040,607],{},[455,3042,607],{},[437,3044,3045,3047,3049,3051,3053],{},[455,3046,2802],{},[455,3048,604],{},[455,3050,607],{},[455,3052,607],{},[455,3054,607],{},[409,3056,3057],{},"На Python это решение выглядит так:",[2266,3059,3061],{"className":2268,"code":3060,"language":2270,"meta":2271,"style":2271},"dp_table_fosh = [\"f\", \"o\", \"s\", \"h\"]\ndp_table_fish = [\"f\", \"i\", \"s\", \"h\"]\ndp_table = [[0 for i in range(len(dp_table_fosh))] for i in range(len(dp_table_fish))]\nfor i in range(0, len(dp_table_fish)):\n    for j in range(0, len(dp_table_fosh)):\n        if dp_table_fosh[j] == dp_table_fish[i]:  # Буквы совпадают\n            dp_table[i][j] = dp_table[i-1][j-1] + 1\n        else:  # Буквы не совпали\n            dp_table[i][j] = max(dp_table[i-1][j], dp_table[i][j-1])\nfor i in dp_table:\n    print(i)\n",[2273,3062,3063,3089,3113,3152,3172,3193,3206,3230,3238,3264,3274],{"__ignoreMap":2271},[2276,3064,3065,3068,3070,3072,3074,3076,3079,3081,3083,3085,3087],{"class":2278,"line":2279},[2276,3066,3067],{"class":2282},"dp_table_fosh ",[2276,3069,2287],{"class":2286},[2276,3071,2290],{"class":2282},[2276,3073,2325],{"class":2293},[2276,3075,2297],{"class":2282},[2276,3077,3078],{"class":2293},"\"o\"",[2276,3080,2297],{"class":2282},[2276,3082,2305],{"class":2293},[2276,3084,2297],{"class":2282},[2276,3086,2294],{"class":2293},[2276,3088,2312],{"class":2282},[2276,3090,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111],{"class":2278,"line":2315},[2276,3092,2318],{"class":2282},[2276,3094,2287],{"class":2286},[2276,3096,2290],{"class":2282},[2276,3098,2325],{"class":2293},[2276,3100,2297],{"class":2282},[2276,3102,2300],{"class":2293},[2276,3104,2297],{"class":2282},[2276,3106,2305],{"class":2293},[2276,3108,2297],{"class":2282},[2276,3110,2294],{"class":2293},[2276,3112,2312],{"class":2282},[2276,3114,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3138,3140,3142,3144,3146,3148,3150],{"class":2278,"line":2342},[2276,3116,2345],{"class":2282},[2276,3118,2287],{"class":2286},[2276,3120,2350],{"class":2282},[2276,3122,531],{"class":2353},[2276,3124,2356],{"class":2286},[2276,3126,2359],{"class":2282},[2276,3128,2362],{"class":2286},[2276,3130,2365],{"class":2353},[2276,3132,2368],{"class":2282},[2276,3134,2371],{"class":2353},[2276,3136,3137],{"class":2282},"(dp_table_fosh))] ",[2276,3139,2377],{"class":2286},[2276,3141,2359],{"class":2282},[2276,3143,2362],{"class":2286},[2276,3145,2365],{"class":2353},[2276,3147,2368],{"class":2282},[2276,3149,2371],{"class":2353},[2276,3151,2390],{"class":2282},[2276,3153,3154,3156,3158,3160,3162,3164,3166,3168,3170],{"class":2278,"line":2393},[2276,3155,2377],{"class":2286},[2276,3157,2359],{"class":2282},[2276,3159,2362],{"class":2286},[2276,3161,2365],{"class":2353},[2276,3163,2368],{"class":2282},[2276,3165,531],{"class":2353},[2276,3167,2297],{"class":2282},[2276,3169,2371],{"class":2353},[2276,3171,2412],{"class":2282},[2276,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190],{"class":2278,"line":2415},[2276,3175,2418],{"class":2286},[2276,3177,2421],{"class":2282},[2276,3179,2362],{"class":2286},[2276,3181,2365],{"class":2353},[2276,3183,2368],{"class":2282},[2276,3185,531],{"class":2353},[2276,3187,2297],{"class":2282},[2276,3189,2371],{"class":2353},[2276,3191,3192],{"class":2282},"(dp_table_fosh)):\n",[2276,3194,3195,3197,3200,3202,3204],{"class":2278,"line":2439},[2276,3196,2442],{"class":2286},[2276,3198,3199],{"class":2282}," dp_table_fosh[j] ",[2276,3201,2448],{"class":2286},[2276,3203,2451],{"class":2282},[2276,3205,2455],{"class":2454},[2276,3207,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228],{"class":2278,"line":2458},[2276,3209,2461],{"class":2282},[2276,3211,2287],{"class":2286},[2276,3213,2466],{"class":2282},[2276,3215,601],{"class":2286},[2276,3217,604],{"class":2353},[2276,3219,2473],{"class":2282},[2276,3221,601],{"class":2286},[2276,3223,604],{"class":2353},[2276,3225,2480],{"class":2282},[2276,3227,2483],{"class":2286},[2276,3229,2486],{"class":2353},[2276,3231,3232,3234,3236],{"class":2278,"line":2489},[2276,3233,2492],{"class":2286},[2276,3235,2495],{"class":2282},[2276,3237,2498],{"class":2454},[2276,3239,3240,3242,3244,3247,3250,3252,3254,3257,3259,3261],{"class":2278,"line":2501},[2276,3241,2461],{"class":2282},[2276,3243,2287],{"class":2286},[2276,3245,3246],{"class":2353}," max",[2276,3248,3249],{"class":2282},"(dp_table[i",[2276,3251,601],{"class":2286},[2276,3253,604],{"class":2353},[2276,3255,3256],{"class":2282},"][j], dp_table[i][j",[2276,3258,601],{"class":2286},[2276,3260,604],{"class":2353},[2276,3262,3263],{"class":2282},"])\n",[2276,3265,3266,3268,3270,3272],{"class":2278,"line":2511},[2276,3267,2377],{"class":2286},[2276,3269,2359],{"class":2282},[2276,3271,2362],{"class":2286},[2276,3273,2520],{"class":2282},[2276,3275,3276,3278],{"class":2278,"line":2523},[2276,3277,2526],{"class":2353},[2276,3279,2529],{"class":2282},[2266,3281,3283],{"className":2268,"code":3282,"language":2270,"meta":2271,"style":2271},"dp_table_fosh = [\"f\", \"o\", \"s\", \"h\"]\ndp_table_fort = [\"f\", \"o\", \"r\", \"t\"]\ndp_table = [[0 for i in range(len(dp_table_fosh))] for i in range(len(dp_table_fort))]\nfor i in range(0, len(dp_table_fort)):\n    for j in range(0, len(dp_table_fosh)):\n        if dp_table_fosh[j] == dp_table_fort[i]:  # Буквы совпадают\n            dp_table[i][j] = dp_table[i-1][j-1] + 1\n        else:  # Буквы не совпали\n            dp_table[i][j] = max(dp_table[i-1][j], dp_table[i][j-1])\nfor i in dp_table:\n    print(i)\n",[2273,3284,3285,3309,3335,3374,3395,3415,3428,3452,3460,3482,3492],{"__ignoreMap":2271},[2276,3286,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307],{"class":2278,"line":2279},[2276,3288,3067],{"class":2282},[2276,3290,2287],{"class":2286},[2276,3292,2290],{"class":2282},[2276,3294,2325],{"class":2293},[2276,3296,2297],{"class":2282},[2276,3298,3078],{"class":2293},[2276,3300,2297],{"class":2282},[2276,3302,2305],{"class":2293},[2276,3304,2297],{"class":2282},[2276,3306,2294],{"class":2293},[2276,3308,2312],{"class":2282},[2276,3310,3311,3314,3316,3318,3320,3322,3324,3326,3329,3331,3333],{"class":2278,"line":2315},[2276,3312,3313],{"class":2282},"dp_table_fort ",[2276,3315,2287],{"class":2286},[2276,3317,2290],{"class":2282},[2276,3319,2325],{"class":2293},[2276,3321,2297],{"class":2282},[2276,3323,3078],{"class":2293},[2276,3325,2297],{"class":2282},[2276,3327,3328],{"class":2293},"\"r\"",[2276,3330,2297],{"class":2282},[2276,3332,2586],{"class":2293},[2276,3334,2312],{"class":2282},[2276,3336,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371],{"class":2278,"line":2342},[2276,3338,2345],{"class":2282},[2276,3340,2287],{"class":2286},[2276,3342,2350],{"class":2282},[2276,3344,531],{"class":2353},[2276,3346,2356],{"class":2286},[2276,3348,2359],{"class":2282},[2276,3350,2362],{"class":2286},[2276,3352,2365],{"class":2353},[2276,3354,2368],{"class":2282},[2276,3356,2371],{"class":2353},[2276,3358,3137],{"class":2282},[2276,3360,2377],{"class":2286},[2276,3362,2359],{"class":2282},[2276,3364,2362],{"class":2286},[2276,3366,2365],{"class":2353},[2276,3368,2368],{"class":2282},[2276,3370,2371],{"class":2353},[2276,3372,3373],{"class":2282},"(dp_table_fort))]\n",[2276,3375,3376,3378,3380,3382,3384,3386,3388,3390,3392],{"class":2278,"line":2393},[2276,3377,2377],{"class":2286},[2276,3379,2359],{"class":2282},[2276,3381,2362],{"class":2286},[2276,3383,2365],{"class":2353},[2276,3385,2368],{"class":2282},[2276,3387,531],{"class":2353},[2276,3389,2297],{"class":2282},[2276,3391,2371],{"class":2353},[2276,3393,3394],{"class":2282},"(dp_table_fort)):\n",[2276,3396,3397,3399,3401,3403,3405,3407,3409,3411,3413],{"class":2278,"line":2415},[2276,3398,2418],{"class":2286},[2276,3400,2421],{"class":2282},[2276,3402,2362],{"class":2286},[2276,3404,2365],{"class":2353},[2276,3406,2368],{"class":2282},[2276,3408,531],{"class":2353},[2276,3410,2297],{"class":2282},[2276,3412,2371],{"class":2353},[2276,3414,3192],{"class":2282},[2276,3416,3417,3419,3421,3423,3426],{"class":2278,"line":2439},[2276,3418,2442],{"class":2286},[2276,3420,3199],{"class":2282},[2276,3422,2448],{"class":2286},[2276,3424,3425],{"class":2282}," dp_table_fort[i]:  ",[2276,3427,2455],{"class":2454},[2276,3429,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450],{"class":2278,"line":2458},[2276,3431,2461],{"class":2282},[2276,3433,2287],{"class":2286},[2276,3435,2466],{"class":2282},[2276,3437,601],{"class":2286},[2276,3439,604],{"class":2353},[2276,3441,2473],{"class":2282},[2276,3443,601],{"class":2286},[2276,3445,604],{"class":2353},[2276,3447,2480],{"class":2282},[2276,3449,2483],{"class":2286},[2276,3451,2486],{"class":2353},[2276,3453,3454,3456,3458],{"class":2278,"line":2489},[2276,3455,2492],{"class":2286},[2276,3457,2495],{"class":2282},[2276,3459,2498],{"class":2454},[2276,3461,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480],{"class":2278,"line":2501},[2276,3463,2461],{"class":2282},[2276,3465,2287],{"class":2286},[2276,3467,3246],{"class":2353},[2276,3469,3249],{"class":2282},[2276,3471,601],{"class":2286},[2276,3473,604],{"class":2353},[2276,3475,3256],{"class":2282},[2276,3477,601],{"class":2286},[2276,3479,604],{"class":2353},[2276,3481,3263],{"class":2282},[2276,3483,3484,3486,3488,3490],{"class":2278,"line":2511},[2276,3485,2377],{"class":2286},[2276,3487,2359],{"class":2282},[2276,3489,2362],{"class":2286},[2276,3491,2520],{"class":2282},[2276,3493,3494,3496],{"class":2278,"line":2523},[2276,3495,2526],{"class":2353},[2276,3497,2529],{"class":2282},[409,3499,3500],{},"Ещё примеры применения динамического программирования:",[1980,3502,3503,3506,3509],{},[1983,3504,3505],{},"Биологи используют самую длинную общую подпоследовательность для выявления сходства в цепях ДНК. По этой метрике можно судить о сходстве двух видов животных, двух заболеваний и т.д. Самая длинная общая подпоследовательность используется для поиска лекарства от рассеянного склероза.",[1983,3507,3508],{},"Вы когда-нибудь пользовались ключом diff (например, в команде git diff)? Этот ключ выводит информацию о различиях между двумя файлами, а для этого он использует динамическое программирование.",[1983,3510,3511],{},"Расстояние Левенштейна оценивает, насколько похожи две строки, а для его вычисления применяется динамическое программирование. Расстояние Левенштейна используется в самых разных областях, от проверки орфографии до выявления отправки пользователем данных, защищенных авторским правом.",[409,3513,3514],{},"Поздравляю — вы справились! Безусловно, это была одна из самых сложных тем в программировании.\nНиже посмотрите и выполните упражнения, чтобы закрепить свои знания по теме.",[406,3516,3517],{},[409,3518,3519,3520],{},"В следующей статье речь идёт про ",[413,3521,3522],{"href":303},"алгоритм k ближайших соседей.",[479,3524],{"id":2271},[401,3526],{":isList":3527,"title":3528},"[\"Динамическое программирование применяется при оптимизации некоторой характеристики;\",\"Динамическое программирование работает только в ситуациях, в которых задача может быть разбита на автономные подзадачи;\",\"В каждом решении из области динамического программирования строится таблица;\",\"Значения ячеек таблицы обычно соответствуют оптимизируемой характеристике;\",\"Каждая ячейка представляет подзадачу, поэтому вы должны подумать о том, как разбить задачу на подзадачи;\",\"Не существует единой формулы для вычисления решений методом динамического программирования.\"]","ШПАРГАЛКА",[479,3530],{"id":3531},"_1",[3533,3534],"card-collapsible-num-answers",{":isAnswers":3535,":isList":3536,":startOl":604,"isText":3537,"title":3538},"[\"Да. Вы сможете положить в рюкзак клавиатуру, смартфон и гитару общей стоимостью 4500.\",\"Возьмите воду, еду и камеру.\",\"Строки таблицы clues(столбцы) и blue(строки): | 0 0 0 0 0 | 0 1 0 0 0 | 0 0 2 0 0 | 0 0 0 3 0 |.\"]","[\"Предположим, к предметам из примера первой задачи(гитара, магнитофон, ноутбук) добавился еще один: клавиатура. Она весит 1 кг и стоит 1000₽. Стоит ли ее брать?\",\"Предположим, что вы собираетесь в турпоход. Емкость вашего рюкзака составляет 6 фунтов, и вы можете взять предметы из следующего списка. У каждого предмета имеется стоимость; чем она выше, тем важнее предмет: вода, 3 кг, 10; книга, 1 кг, 3; еда, 2 кг, 9; куртка, 2 кг, 5; камера, 1 кг, 6. Как выглядит оптимальный набор предметов для похода?\",\"Нарисуйте и заполните таблицу для вычисления самой длинной общей подстроки между строками blue и clues.\"]","Попробуйте ответить на следующие вопросы","УПРАЖНЕНИЯ",[409,3540,3541,3542,3546,3547,3550],{},"Попробуйте сами скопировать и запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает.\nДля этого в ячейке с кодом нажмите клавиши на клавиатуре ",[3543,3544,3545],"strong",{},"Shift+Enter"," или запустите код через ",[3543,3548,3549],{},"кнопку Run"," по значку ▶.",[3552,3553],"jypiter",{},[3555,3556,3557],"style",{},"\nmjx-container[jax=\"SVG\"] {\n  direction: ltr;\n}\n\nmjx-container[jax=\"SVG\"] > svg {\n  overflow: visible;\n  min-height: 1px;\n  min-width: 1px;\n}\n\nmjx-container[jax=\"SVG\"] > svg a {\n  fill: blue;\n  stroke: blue;\n}\n\nmjx-container[jax=\"SVG\"][display=\"true\"] {\n  display: block;\n  text-align: center;\n  margin: 1em 0;\n}\n\nmjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"] {\n  display: flex;\n}\n\nmjx-container[jax=\"SVG\"][justify=\"left\"] {\n  text-align: left;\n}\n\nmjx-container[jax=\"SVG\"][justify=\"right\"] {\n  text-align: right;\n}\n\ng[data-mml-node=\"merror\"] > g {\n  fill: red;\n  stroke: red;\n}\n\ng[data-mml-node=\"merror\"] > rect[data-background] {\n  fill: yellow;\n  stroke: none;\n}\n\ng[data-mml-node=\"mtable\"] > line[data-line], svg[data-table] > g > line[data-line] {\n  stroke-width: 70px;\n  fill: none;\n}\n\ng[data-mml-node=\"mtable\"] > rect[data-frame], svg[data-table] > g > rect[data-frame] {\n  stroke-width: 70px;\n  fill: none;\n}\n\ng[data-mml-node=\"mtable\"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed {\n  stroke-dasharray: 140;\n}\n\ng[data-mml-node=\"mtable\"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted {\n  stroke-linecap: round;\n  stroke-dasharray: 0,140;\n}\n\ng[data-mml-node=\"mtable\"] > g > svg {\n  overflow: visible;\n}\n\n[jax=\"SVG\"] mjx-tool {\n  display: inline-block;\n  position: relative;\n  width: 0;\n  height: 0;\n}\n\n[jax=\"SVG\"] mjx-tool > mjx-tip {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\nmjx-tool > mjx-tip {\n  display: inline-block;\n  padding: .2em;\n  border: 1px solid #888;\n  font-size: 70%;\n  background-color: #F8F8F8;\n  color: black;\n  box-shadow: 2px 2px 5px #AAAAAA;\n}\n\ng[data-mml-node=\"maction\"][data-toggle] {\n  cursor: pointer;\n}\n\nmjx-status {\n  display: block;\n  position: fixed;\n  left: 1em;\n  bottom: 1em;\n  min-width: 25%;\n  padding: .2em .4em;\n  border: 1px solid #888;\n  font-size: 90%;\n  background-color: #F8F8F8;\n  color: black;\n}\n\nforeignObject[data-mjx-xml] {\n  font-family: initial;\n  line-height: normal;\n  overflow: visible;\n}\n\nmjx-container[jax=\"SVG\"] path[data-c], mjx-container[jax=\"SVG\"] use[data-c] {\n  stroke-width: 3;\n}\n",[3555,3559,3560],{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":2271,"searchDepth":2315,"depth":2415,"links":3562},[3563],{"id":399,"depth":2315,"text":298,"children":3564},[3565,3568,3573],{"id":420,"depth":2342,"text":421,"children":3566},[3567],{"id":481,"depth":2393,"text":482},{"id":583,"depth":2342,"text":298,"children":3569},[3570,3571,3572],{"id":658,"depth":2415,"text":448},{"id":839,"depth":2415,"text":442},{"id":1017,"depth":2415,"text":445},{"id":1196,"depth":2342,"text":1197,"children":3574},[3575,3576,3577,3578,3579,3580,3585,3586,3591,3594,3595],{"id":1203,"depth":2415,"text":1204},{"id":1477,"depth":2415,"text":1478},{"id":1484,"depth":2415,"text":1485},{"id":1491,"depth":2415,"text":1492},{"id":1609,"depth":2415,"text":1610},{"id":1616,"depth":2393,"text":1617,"children":3581},[3582,3583,3584],{"id":1865,"depth":2415,"text":1866},{"id":1960,"depth":2415,"text":1961},{"id":1967,"depth":2415,"text":1968},{"id":1974,"depth":2393,"text":1975},{"id":2005,"depth":2393,"text":2006,"children":3587},[3588,3589,3590],{"id":2012,"depth":2415,"text":2013},{"id":2103,"depth":2415,"text":2104},{"id":2179,"depth":2415,"text":2180},{"id":2829,"depth":2393,"text":2830,"children":3592},[3593],{"id":2906,"depth":2415,"text":2907},{"id":2271,"depth":2393,"text":2271},{"id":3531,"depth":2393,"text":2271},"2026-05-07T00:00:00.000Z","Метод решения сложных задач, разбиваемых на подзадачи. Примеры задач.","md","images/blog/python/st34/img.png",{},40,true,34,{"title":298,"description":3597},"8iXZuvDxphf10Z91Mj4Q2P55jaNJp24SxlXIIXo5joU",[3607,3609],{"title":294,"path":295,"stem":296,"description":3608,"children":-1},"Жадная стратегия при решении задач. NP-трудные задачи. Приближенное решение NP-полных задач.",{"title":302,"path":303,"stem":304,"description":3610,"children":-1},"Сценарии использования и ограничениями алгоритма k ближайших соседей. Рекомендации по темам, которые стоит изучать дальше.",1779376858027]