• Минимизация фактов выплат/перевозок?

    alan_mun
    @alan_mun
    Приветствую!

    Попробовал решить Вашу задачку, и вот результат в виде кода на Qt.

    Предлагаю решать её так:
    1. С полной уверенностью находим баланс для транзакций.
    2. Удаляем все совпадения из баланса (записывая транзакцию в ответ) и все объекты с нулевым балансом.
    3. Находим самый маленький по модулю баланс.
    4. А сейчас начинается милая сердцу рекурсия: для каждого из баланса другого знака создаём и проводим транзакцию. И запускаем эту же функцию с новыми значениями баланса.
    5. Если получившийся результат в пункте 4 самый короткий по числу транзакций — радостно сохраняем его и передаём наверх.

    Естественно пугаюсь того что рекурсия будет очень прожорливой.
    Ответ написан