0 / 0 / 0
Регистрация: 25.04.2019
Сообщений: 2
1

Определить сколько максимум денег может заработать продавец

22.11.2021, 17:37. Показов 308. Ответов 0

Студворк — интернет-сервис помощи студентам
Задача на динамическое програмирование

В универе задали вот такую задачу :
Продавец книг заметил что если клиенту предложит правильную цену за книгу тогда он её купит. По одежде он оценивал денежнок состояние клиета . Если денежное состояние p а цена книги k то предложенная цена должна бвть pk.
Во время чрмарки очень много клинетов продавец не успевал посмотреть все книги а выбирал одну из 3 верхних в куче.
Дано n книг и поле цен h книг [ h1 , h2 ... hn] и поле денежного состояния клиента [ p1 , p2 ... pn] . Сколько максимум денег может заработать продавец.
n ≤ 500 и 1 ≤ hi ≤ 1000 и 1 ≤ pi ≤ 1000.

Пример: Ответ:
n = 4 336
h = [16, 6, 2, 10]
p = [3, 8, 12, 9]

первому клиенту мы даем третью книгу сверху со стоимостью 2, зв которую он заплатит 6 . У нас остаются книги со стоимостью 16, 6, 10 ( в этом порядке) . второму покупателю лаем вторую книгу сверху за которую он заплатит 6*8 = 48 . Остаются книги 16 и 10 . Третьему предлагаем самую верхнюю книгу и получаем 16*12 = 192. и последний забирает последнюю книгу за 90. и общая сумма 336.


Вот такая задача.
Уже несколько дней сижу думаю над алгоритмом и получилось придумать только аналог бэктрекинга.

Написанно в питоне, p это список покупателей k это список цен книг , я его уменьшаю во время рекурсии и i это индекс клиента в списке. Вот только такое решение не посчитает при n = 20 а надо до 500 .

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def back_tracking_riesenie(p, k, i):
    if len(k) == 1:
        vysl = p[i] * k[0]
        return vysl
    k1 = k[1:]
    k2 = [k[0]]
    [k2.append(i) for i in k[2:]]
    if len(k) == 2:
        vysl1 = p[i] * k[0] + back_tracking_riesenie(p, k1, i + 1)
        vysl2 = p[i] * k[1] + back_tracking_riesenie(p, k2, i + 1)
        return max(vysl1, vysl2)
 
    if str([[k[0], k[1], [k[2]]]]) in pole[i]:
        return pole[i].get([k[0], k[1], [k[2]]])
 
    k3 = k[:2]
    [k3.append(i) for i in k[3:]]
    vysl1 = p[i] * k[0] + back_tracking_riesenie(p, k1, i + 1)
    vysl2 = p[i] * k[1] + back_tracking_riesenie(p, k2, i + 1)
    vysl3 = p[i] * k[2] + back_tracking_riesenie(p, k3, i + 1)
 
    vysl = max(vysl1, vysl2, vysl3)
    pole[i][str([k[0], k[1], [k[2]]])] = vysl
    return vysl
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2021, 17:37
Ответы с готовыми решениями:

Динамическое програмирование
Очень нужна помощь в решении задач на С++ или С++ Builder Помогите кто сможет,последняя надежда на...

Задача из книги "Програмирование - принципы и практика использования C++"
Кто читал ету книгу, помогите разобратся с задачей с 12 главы. Никак не могу скомпилировать простую...

Задача на динамическое програмирование
есть задача,и решение,но решается перебором,а нужно чтобы решалась динамически,помогите пожайлуста...

Динамическое програмирование
Запишите программу, которая определит количество всех комбинаций монет (1,5,10,25,50 центов),...

динамическое програмирование
помогите пожалуста мне нала создать 3 програмы пример и решение динамического програмирования а...

0
22.11.2021, 17:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2021, 17:37
Помогаю со студенческими работами здесь

Динамическое програмирование
Написал программу для решения заданий типа: У исполнителя Калькулятор две команды, которым...

Динамическое програмирование
Запишите программу, которая определит количество всех комбинаций монет (1,5,10,25,50 центов),...

Динамическое програмирование
Есть табличка с исходными данными, нужно составить код для выведения в каком предприятии какой...

Динамическое програмирование. Текст
Приложил фото Друзья, делаю игру кто хочет стать миллионером и не хочется делать 15 форм, я плохо...

Рекуррентные Соотношения и динамическое програмирование. Искомая подпоследовательность (1,2,3,2,3,4,6)
Помогите пожалуйста с решением !! алгоритм есть но программа для Pascal (в конце сообщения) а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru