int main() { Reader reader; /// Если одна большая плитка стоит больше чем две маленькие, то можно ничего не искать if( reader.A() > reader.B()*2 ) { std::cout << ( reader.Stars()*reader.B() ); return 0; } TableType adj; /// заполняем данными из входного файла reader.DoFill(adj); /// представляем итые клетки в виде двудольного графа /// представляем паркет в виде шахматной доски, черные в одной доле, белые в другой /// ищем максимум паросочетаний PairList pairs; FindPairs( reader.VCount(), reader.UCount(), adj, pairs ); /// считаем найденные пары int count = std::count_if( pairs.begin(), pairs.end(), Compare() ); std::cout << count*reader.A() + ( reader.Stars() - count*2 )*reader.B(); return 0; }