Здравствуйте, HiFix, Вы писали:
HF>Здравствуйте, FreshMeat, Вы писали:
FM>>Здравствуйте, HiFix, Вы писали:
HF>>>Идешь сюда, смотришь задачу №11, разбираешься
.
HF>>>Offtopic: а зачем тебе оно надо?
FM>>Судя по формулировке
FM>>FM>>Задача Должна быть реализована с помощью Динамического программирования.
HF>Формулировку Динамического программирования в студию! (сам не знаю — хочу узнать).
Система перевода рекурсивных функций из экспоненциальных в линейную зависимость времени выполнения путем сохранения промежуточных результатов функции или их вычисления до основного алгоритма.
Например — числа Фибоначи:
void Calc(int x)
{
if (x<1) return 0;
if (x==1) return 1;
return Calc(x-1)+Calc(x-2);
}
Время выполнения в зависимости от числа растет экспотенциально
При динамическом программировании:
static int tempResult[max];//ессно здесь должен быть динамический массив
void Calc(int x)
{
if (x<1) return 0;
if (x==1) return 1;
if (tempResult[x]!=0)return tempResult[x];
return (tempResult[x]=Calc[x-1]-Calc[x-2]);
}
Время выполнения линейное, так как используется уже выполненые результаты вычисления функции
В данном случае, классическая задача о ранце с использованием динамического программирования. Решение не привожу, наверняка есть в интере есть до фига информации по данной задаче. После поиска, хотя бы знания останутся.(вот такой я злой)
С уважением, Gleb.