Ctrl K

Как рассчитаться за меньше переводов

Сложная
Компания друзей одалживала друг другу деньги. Каждая запись payments[i] = [from, to, amount] означает, что участник from дал участнику to сумму amount, и теперь to должен её вернуть. Теперь все хотят рассчитаться. Перевод — это любая сумма от одного участника другому, и переводить можно кому угодно, а не только тому, у кого брал. Верните наименьшее число переводов, после которых никто никому ничего не должен.
Пример 1
payments=[[0, 1, 20], [1, 2, 20]] → 1

Участник 1 получил 20 и отдал 20 — он в расчёте. Остаётся, чтобы 2 вернул 0 двадцать: один перевод.

Пример 2
payments=[[0, 1, 5], [1, 0, 5]] → 0

Долги взаимно погашены, переводы не нужны.

Пример 3
payments=[[0, 1, 10], [0, 2, 10], [3, 0, 15]] → 3

Итог: 1 и 2 должны по 10, 0 ждёт 5, 3 ждёт 15. Никакая часть участников не сводится в ноль отдельно, поэтому нужно 3 перевода, например 1→3 на 10, 2→3 на 5 и 2→0 на 5.

Ограничения
  • 1 ≤ len(payments) ≤ 8
  • payments[i] = [from, to, amount]
  • 0 ≤ from, to < 12, from ≠ to
  • 1 ≤ amount ≤ 100
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЦепочки с квадратными суммами СложнаяЛучший набор слов из фишек СложнаяЗаказы из одинаковых деталей СложнаяЧестно поделить задания СложнаяКвадратная рамка из палочек Средняя
загружаем Python…
Вход
payments=[[0, 1, 20], [1, 2, 20]]
Ожидается
1

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 66 тестов на сервере, включая скрытые.