Подбор комбинации с учетом цены и повторов
Нужно разработать режим питания, исходя из данных введенных пользователем. У нас есть база данных с блюдами и их ценами (так же у блюд есть пометка является ли оно завтраком, т.к. на завтрак чаще всего едят что то отличное от обеда и ужина). На вход от пользователя поступает количество денег (Валюта не важна) и количество дней. На выходе мы должны получить режим питания на заданное количество дней. Условия:
- Нужно чтобы цена не отличалась от заданной более чем на 3%.
- Нужно чтобы блюда не повторялись чаще чем раз в 5 дней.
Для себя я нашел такой, не сказать что эффективный, способ решения: Мы ищем среднюю цену на день = количество денег/количество дней. Затем пока не достигнем заданного количества дней, мы перебираем для каждого завтрака, обед и ужин(3 цикла for 2 из которых вложены) и если цена не слишком отличается то мы заканчиваем перебор и добавляем этот день. Тоесть конструкция сейчас выглядит так:
while(daysCounter < days){
for(){
for(){
for(){
}
}
}
}
Выглядит страшненько, хотя данных не очень много (относительно, количество блюд примерно 150). Есть мысли что можно найти более эффективное решение. Есть мысли о динамическом программировании, но пока нет идей как реализовать.