Как составить алгоритм выбора наиболее эффективной команды героев?
Если команда противника уже определена, а размеры команд такие, какие Вы описали (скажем до 5-6 персонажей), то полным перебором. (Вы кстати не рассказали о правилах ведения боя - один на один один бой или выживший может помогать другим "коллегам" и т.п.)
Если команда противника еще не определена, то теория игр и минимаксный подход.
Выбор, чтобы понять: "сможет ли выбранный герой кого-то победить?" можно определить так: суммарная эффективность (сумма разниц показателей урона выбранного героя с героями противника) выбранных героев должна быть больше нуля.S=(A1-B1)+(A1-B2)+(A1-B3) > 0 => ∞
Т.е. перебирать, чтобы эффективность каждого была положительна и стремилась к нулю (минимальный запас перевеса или минимакс). 
Всё остальное - это оптимизация.
Я бы еще добавил такие параметры (коэффициенты, которые ещё нужно более детально прорабатывать), как: 
1. урон атаки каждым из возможных способов атаки (АТАКА)
2. время перезарядки каждого из возможных способов
3. возможность атаки каждого типа цели
4. дальность атаки до каждого типа цели
5. защита каждым из возможных способов (ЗАЩИТА)
6. время восстановления защиты каждого из возможных способов защиты
7. возможность защиты от каждого типа атаки
8. скорость передвижения каждым из возможных способов (ПЕРЕДВИЖЕНИЕ)
9. свобода передвижения (полная - когда летает, частичная - зависит от ландшафта, стационарная - например, защитная турель или бункер)
При пошаговой игре: время перезарядки может быть рассчитано, как количество атак за ход.
Большая разница тут: ПОШАГОВЫЙ или REAL-TIME бой.
Я тут вспомню про старик (StarCraft - RTS от Blizzard):
1. Когда загораживают выход двумя MCV (рабы) которые умеют друг друга чинить, а за ними ставят пару маринов, которые отбивают полчища, пока те атакуют рабов. Вроде бы, при любом расчёте: убить 2-х маринов и 2-х рабов - не проблема, если у тебя 6 маринов  и при любом просчёте - это будет явно видно! 
Однако, как показывает реальность: всё зависит от конкретного ландшафта/местности и умения стратегически мыслить.
2. Маринов ставят за здания полукругом с равным удалением для одновременной атаки перед входом, если атакуют войска ближнего боя (например, зерлинги): сделано, чтобы те, кто вбегает : оказывается сразу под огнём всех маринов и, чтобы убить всех этих маринов, нужно атаковать одновременно каждого с небольшим превосходством, что сделать мышью - практически нереально.
3. Банальный лабиринт: когда есть узкий проход и в ближнем бое может участвовать лишь несколько единиц, остальные стоят и ждут (или умирают под обстрелом).
Варианты создания лабиринта: узкие проходы на местности, специфичная застройка, специфичная организация войсковых единиц (юнитов) или любые сочетания всего перечисленного.
Многое зависит от доп.данных и по этой таблице - не возможно ответить на Ваш вопрос. Нужны ещё данные.