@pcdesign

Как посчитать БЖУ?

Вот например, есть продукты, которые в 100 граммах содержат:

[
   {
      "Гречка":{
         "Белки":11.7,
         "Жиры":2.7,
         "Углеводы":75
      }
   },
   {
      "Яйца":{
         "Белки":12.7,
         "Жиры":11.5,
         "Углеводы":0.7
      }
   },
   {
      "Сало":{
         "Белки":1.4,
         "Жиры":90,
         "Углеводы":0
      }
   }
]


Сколько чего нужно съесть, чтобы получилось, например 100 гр. белка, 95 гр. жиров и 150 гр. углеводов?

По идее первое, что пришло в голову это
https://ru.wikipedia.org/wiki/Задача_о_рюкзаке
Полез в гугл, ну нашел какие-то варианты.
https://pypi.org/project/knapsack/
Но они не очень подходят для данной проблемы.

P.S. Если тупо в экселе считать, то получается надо съесть ~ 200 гр. гречки, 600 гр. яиц и 20 гр. сала.
  • Вопрос задан
  • 493 просмотра
Решения вопроса 2
hint000
@hint000
у админа три руки
https://www.google.com/search?q=линейная+алгебра+п...
https://ru.wikipedia.org/wiki/Матрица_перехода
gre=11.7*pro+2.7*fat+75*cbh
egg=12.7*pro+11.5*fat+0.7*cbh
sal=1.4*pro+90*fat+0*cbh
Матрица перехода:
11.7 2.7 75
12.7 11.5 0.7
1.4 90 0
Нужно вычислить обратную матрицу и умножить эту обратную на искомый столбец (100, 50, 150). Не забыть, что за единицу измерения взяли 100 г.
Ответ написан
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Это задача о многомерном рюкзаке (multi-dimensional knapsack). Каких-то простых трюков, как с обычным одномерным рюкзаком тут нет. Только перебор с отсечениями.

Еще можно свести задачу к целочисленному линейному программированию. Вводите переменные - сколько штук каждого пункта съели, составляете линейные уравнения. Потом можно это все скормить какому-нибудь решателю. Сейчас много библиотек и они довольно быстро такие задачи щелкают. Гуглите "integer linear programming solver".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы