Exemple #1
0
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;
}