Я работаю над проблемой комбинаторики, где мне нужно вычислить, сколько способов, которыми набор {1, 2, ..., n} может быть разделен на два подмножества с одинаковой суммой , так что каждое число от 1 до N находится в одном из двух подмножеств. Два подмножества неупорядочены (т.е. {a, b} считаются такими же, как {b, a} ). ограничения :
{1, 3, 4, 6} and {2, 5, 7}
{1, 2, 5, 6} and {3, 4, 7}
{1, 2, 4, 7} and {3, 5, 6}
{1, 6, 7} and {2, 3, 4, 5}
Итак, ответ 4 .
Что я попробовал:
Я заметил общую сумму s = n (n+1)/2 , и если s нечетный, ответ - 0 . Я также попытался адаптировать динамический подход программирования, аналогичный классической подмножеством.MOD = 10**9 + 7
n = 7
# Idea: dp[j] = number of ways to pick a subset from {1..i} with sum j
dp = [[0] * (target + 1) for _ in range(n + 1)]
# Initialize...
< /code>
Но я не уверен, как: < /p>
Избегайте переосмысления зеркальных разделов. /> Вопрос: < /h3>
Как мне изменить или заполнить этот DP, чтобы правильно считать уникальные двусмысленные двусторонние двойники {1..n} < /code>? Есть ли стандартный трюк (например, вдвое окончательное количество, включение-эксклюзия и т. Д.) Я должен использовать здесь?
Я работаю над проблемой комбинаторики, где мне нужно вычислить, сколько способов, которыми набор {1, 2, ..., n} может быть разделен на два подмножества с одинаковой суммой , так что каждое число от 1 до N находится в одном из двух подмножеств. Два подмножества неупорядочены (т.е. {a, b} считаются такими же, как {b, a} ). [b] ограничения [/b]:
[code]n[/code] составляет от 1 до 500.[code]{1, 3, 4, 6} and {2, 5, 7} {1, 2, 5, 6} and {3, 4, 7} {1, 2, 4, 7} and {3, 5, 6} {1, 6, 7} and {2, 3, 4, 5} [/code] Итак, ответ 4 . Что я попробовал: Я заметил общую сумму s = n (n+1)/2 , и если s нечетный, ответ - 0 . Я также попытался адаптировать динамический подход программирования, аналогичный классической подмножеством.MOD = 10**9 + 7 n = 7 # Idea: dp[i][j] = number of ways to pick a subset from {1..i} with sum j dp = [[0] * (target + 1) for _ in range(n + 1)] # Initialize... < /code> Но я не уверен, как: < /p>
Избегайте переосмысления зеркальных разделов. /> Вопрос: < /h3> Как мне изменить или заполнить этот DP, чтобы правильно считать уникальные двусмысленные двусторонние двойники {1..n} < /code>? Есть ли стандартный трюк (например, вдвое окончательное количество, включение-эксклюзия и т. Д.) Я должен использовать здесь?
Я работаю над проблемой комбинаторики, где мне нужно вычислить, сколько способов, которыми набор {1, 2, ..., n} может быть разделен на два подмножества с одинаковой суммой , так что каждое число от 1 до N находится в одном из двух подмножеств. Два...
Мне нужен алгоритм, разделяющий входные данные на подмножества любого размера, сумма элементов которых равна целевым значениям, в данном случае 8, 6 и 3. Оба входных значения и sumTargets могут быть любого размера и...
Мне нужен алгоритм, разделяющий входные данные на подмножества любого размера, сумма элементов которых равна целевым значениям, в данном случае 8, 6 и 3. Оба входных значения и sumTargets могут быть любого размера и...