Подробнее
l9106 За Г^Ае Аача «Heroes of Might and Magic Г1°на|ц0^^Аен'г ||| ^ «— _ °СТь И Догг^ать армию И^астилс" к игре Heroes of Might and Magic III И вот ем/ Ха РЗКт A°CTvnu Ь Эрмию ИЗ своргп ИЛСЯ к ИГре Heroes of Might and Magic II °е Аля найма кип ГОрода* Следующая таблица отряжает сил/ 3 количество существ в городе Дениса еРист ики Стоимость сУЩеств Золото ДРагоцеННЬ1е к&МНи Титан 5000 Нага 1500 Сила Ртуть существ о Джинн 750 Существа Маг Тилем "500 400 Горгулья I Гремлин 200 Денис имеет: ^ 200000 золотых монет, ^ 115 драгоценных камней; S 80 единиц ртути. Он стремится максимизировать силу нанятой им армии, но при этом хочет, итпйы-пбшая сила существ дальнего боя (титанов, магов и гремлинов) была не меньше чтооы.оощая сила оущ ^ (джинов и горгулий) - не меньше 2000 4000 единиц, а ле Щ чт0 денис может продать драгоценные камни на базаре Необходимо таюкеуче , камень п°цен1мо модель данной задачи
Heroes of Might and Magic III,Heroes of Might and Magic,Игры,математика,наука,экзамен
Еще на тему
а еше есть "все остальные"
так один парень в истории одного француза просчитался на 12, чтоли, нулей :)
http://imgur.com/a/DWOYB - тут мои выкладки.
Ответ: 10 Титанов, 20 Наг, 30 Джиннов, 15 Магов, 25 Големов, 110 Гарпий, 500 Гремлинов.
*горгулий, конечно.
Это задача на Integer Programming, она на порядок сложнее.
https://en.wikipedia.org/wiki/Integer_programming
Гремлины как основа, титаны на сдачу. Магов вообще не брать.
тебя просят задачу решить, а ты какие-то дополнительные параметры из ушей вынимаешь.
просят максимизировать.
все остальное лишь ограничения.
математика - не твое
Условия задачи должны быть однозначными - это уж претензия к составлявшему (и про гремлинов, которых стрелками обозвали, а они милишники, уже говорили).
Хотя по поводу данной задачи первое, что приходит в голову - это задача про заполнение сосуда камнями разного размера: ограниченное количество юнитов, возможно, само по себе предполагает невозможность использования лишь одного типа - считать надо, а математика - не моё.
базы не на том же серваке находятся? можно попробовать формировать запрос так, чтобы максимум вычислений выполнялся именно на уровне субд.
Особенно учитывая, что базы те еще с начала 2000х и на ms sql2000. Кроме того невозможность использовать с этими базами х64 офис, приводит к тому, что экселев процесс, достигнув 2Гб в ОЗУ, тупо крашится, и можно начинать все по новой. Вот так вот легко один срез можно сутки делать, по 5 раз перезапуская ))
насчет данных - насколько я понимаю, из базы вытягиваются все данные обычным селектом, после чего с ними средствами VBA делаются определенные математические и/или другие действия и получается какой-то результат. фишка в том, что нужно переписать селект так, чтобы эти действия производились самим sql сервером, а на выход выдавались уже итоговые данные. ну а почитать здесь разве что сами азы языка sql. думаю что для человека, пишущего на VBA, сформировать запрос на T-SQL, читнув документацию, не составит особых проблем.
ну и апгрейднуть sql все-таки стоит, это достаточно несложно, в инете куча пошаговых инструкций. кроме того, 2008й на мой взгляд, гораздо лечге обслуживать.
в качестве примера кусок говнокода, который Х лет назад писал на VBS, от VBA не сильно отличается.
sub sqlConnect()
Set sqlCon = CreateObject("ADODB.Connection")
sqlCon.Open "Provider=SQLOLEDB;Data Source=XXXXXXX;Initial Catalog=xxxxxxx;User ID=yyyyyyy;Password=zzzzzzzz;"
End Sub
сами запросы
'Get Servers and Backups Info
Set rs1 = CreateObject("ADODB.Recordset")
Set rs2 = CreateObject("ADODB.Recordset")
sql="SELECT server_id,server_name FROM dbo.servers WHERE customer_id = "+CStr(cid)
rs1.Open sql,sqlCon, adOpenStatic, adLockOptimistic
sql= _
"SELECT dbo.backups.start_time, dbo.backups.backup_analysed_status, dbo.backups.backup_status, dbo.customers.customer_id, dbo.servers.server_name, dbo.servers.server_id" _
& " FROM dbo.backups INNER JOIN "_
& " dbo.servers ON dbo.backups.server_id = dbo.servers.server_id INNER JOIN dbo.customers ON dbo.servers.customer_id = dbo.customers.customer_id" _
& " WHERE (dbo.servers.customer_id = "+cstr(cid)+") AND (YEAR(dbo.backups.start_time) = "+CStr(cyear)+")" _
& " ORDER BY dbo.backups.start_time"
rs2.Open sql,sqlCon, adOpenStatic, adLockOptimistic
Высчитывается себестоимость юнитов: гремлины самые крутые: 17,5, их берём 500шт.
Потом идём по себестоимости юнитов слева направо: 16,6 титаны, забираем.
Наги/Джины/Маги с кооф. 12,5 все. Идём слева направо, остаётся куча золота и пригрошня ресурсов. Заметаем горгулий, т.к. они покупаются за золото.
Остаётся большая куча золота, 15 камней, 40 ртути.
Големы с кооф. 11,4 нам не нужны, ибо есть маги. На остатки ресурсов закупаем 15 магов и 25 големов. Остаётся большая куча золота, закупаем артефактов и идём ломать лица.
вводишь основные функции из разряда там плюс тут минус
находишь ключевое поле, в данном случае это сила армии
вводишь ограничения на поиск ( нельзя купить 0.5 гремлена и т.п.)
нажимаешь рассчитать, если всё верно тогда будет гуд и искомое значение будет расчитано)
2. Т.к. золото как параметр выпадает из задачи, то стоимость армии определяется ртутью и драг камнями (баланс цены нарушен, т.е. СИЛА дорогих "войнов" стала дешевле, чем дешевых.
P.S. вся задача свелась к тому, кого купить лучше на остаток ресур Магов или Големов, т.к. тут уже ограничены остатком ресорсов.
и сумарная сила будет чуть больше - 12875.
если атаки иметь единиц 25 то куча гремленов будет бить больше все другие классы.
https://en.wikipedia.org/wiki/Integer_programming
41500 - (6,0,0,5,0,100,500) с силой 6000 и факт.реурсами (87500, 23, 11) и
41450 - (7,0,0,0,0,101,475) с силой 6020 и факт.реурсами (88450, 21, 7)
теперь сижу и ломаю голову: почему так?
Это нормально. Теперь вопрос - какие ещё есть локальные минимумы, и как искать глобальный минимум.
Кроме того, условия задачи могут не совпадать с житейским опытом игроков, но это мы отбросим.
Конечно, все понимают, что задача на минимум - это стандартная задача матанализа, и задача на максимум сводится к задаче на минимум простым минусом.