Матч 379, Продажа продуктов (SellingProducts)

Дивизион 2, Уровень 2; Дивизион 1, Уровень 1

 

Вы продвигаете новый продукт на рынок. Ячейка price[i] содержит наибольшую цену, которую готов платить i - ый покупатель за Ваш товар, а cost[i] содержит стоимость доставки товара до i - го покупателя. Вам необходимо найти такую цену товара, при которой прибыль будет наибольшей. Если существует несколько цен, при которых прибыль наибольшая, то вернуть наименьшую цену.

 

Класс: SellingProducts

Метод: int optimalPrice(vector<int> price, vector<int> cost)

Ограничения: 1 £ length, width, height £ 106, cubes содержит от 1 до 20 элементов, 1 £ cubes[i] £ 106.

 

Вход. Массив price содержит цены покупателей на Ваш товар, массив cost содержит стоимость доставки товара покупателей.

 

Выход. Наименьшая цена товара, при которой прибыль будет наибольшей.

 

Пример входа

price

cost

{13,22,35}

{0,0,0}

{13,22,35}

{5,15,30}

{13,17,14,30,19,17,55,16}

{12,1,5,10,3,2,40,19}

 

Пример выхода

22

13

17

 

 

РЕШЕНИЕ

полный перебор

 

Для нахождения оптимального значения цены товара перебираем в ее качестве все значения cur_Price = price[i]. Для каждой такой цены в переменной s подсчитываем прибыль. Если текущая полученная прибыль s больше максимальной MaxProfit, то устанавливаем MaxProfit = s. Отдельно рассматриваем случай, когда текущая прибыль s равна максимальной MaxProfit, но при этом текущая цена товара cur_Price меньше opt_Price, на которой достигалась прибыль MaxProfit.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

using namespace std;

 

class SellingProducts

{

public:

  int optimalPrice(vector<int> price, vector<int> cost)

  {

    int i, j, s, MaxProfit, cur_Price, opt_Price;

    for(opt_Price = MaxProfit = i = 0; i < price.size(); i++)

    {

      cur_Price = price[i];

      for(s = j = 0; j < price.size(); j++)

        if (price[j] >= cur_Price)

          s += max(0,cur_Price - cost[j]);

      if (s > MaxProfit) MaxProfit = s,opt_Price = cur_Price; else

      if ((s == MaxProfit) && (cur_Price < opt_Price)) opt_Price = cur_Price;

    }

    return opt_Price;

  }

};