Статья Автор: Красильников Арсений

Решение задачи "Валютные махинации"

Рассмотрим задачу "Валютные махинации" из модуля 11.1d курса на одномерную динамику.
Согласно тематике модуля будем применять в задаче метод динамического программирования. 
Результаты вычислений будем заносить в три массива под каждую из валют: rub, usd, eur для значения рублей, долларов и евро соответственно. Для хранения курса валют в текущий день будем использовать массив с двумя элементами: 0 - курс доллара, 1 - курс евро.


За основу динамики в списке rub будем брать 100 руб. согласно условию. За основу динамики в списках usd и eur будем брать количество валюты, которое мы можем получить в первый день. Оно будет вычислено по формуле: 100.0 / <курс валюты>.


Разобьём задачу на подзадачи:
а/ Вычисляем количество рублей, которое мы можем получить в результате перевода одной из имеющейся валюты по курсу текущего дня. Если это количество больше значения, полученного в предыдущий день (i - 1 день), то записываем полученное значение текущему i-му дню, иначе оставляем значение (i-1)-го дня. 


б/ Вычисляем максимальное количество долларов, которое мы можем получить, переводя рубли. Но есть нюанс: мы можем совершить две операции с валютной в один день (т.е. продать валюту в i-й день и купить заново более выгодную), а не одну (т.е. только покупка на рубли с (i-1)-го дня). Учитывая этот нюанс, а также то, что возможно мы уже имели в (i - 1)-й день максимальное количество долларов, определяем наибольшее количество этой валюты, которое можем иметь в i-й день.


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


В результате вычисления всех подзадач получим три массива с валютой. Поскольку нас интересуют рубли, выводим последнее значение списка rub, которое является ответом. 

Полный листинг программы (Python):




Полный листинг программы (C++):

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать