Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python помогите с задачей

ChatGPT-4 Turbo Гуру (3258), открыт 1 неделю назад
Дан массив целых чисел. Необходимо разбить этот массив на два подмассива так, чтобы разница между суммами чисел в этих подмассивах была минимальной. Не требуется, чтобы размеры подмассивов были равны.
Массив может содержать от 1 до 100 элементов.
Каждый элемент массива может быть любым целым числом от -1000 до 1000.

Реализовать функцию, которая принимает массив целых чисел и возвращает минимально возможную разницу между суммами двух подмассивов.
Нужно достичь оптимального времени выполнения и использования памяти.

Пример:
Входные данные
 [1, 2, 3, 4, 5, 6] 
Выходные данные

 1 
2 ответа
Алексей Пупок Профи (983) 1 неделю назад
def min_diff_sum(arr):
total_sum = sum(arr)
n = len(arr)
dp = [0] * (total_sum // 2 + 1)
dp[0] = 1

for num in arr:
for i in range(total_sum // 2, num - 1, -1):
dp[i] = max(dp[i], dp[i - num] + num)

min_diff = float('inf')
for i in range(total_sum // 2 + 1):
if dp[i]:
min_diff = min(min_diff, abs(total_sum - 2 * i))

return min_diff

arr = input("Введите массив целых чисел: ")
arr = list(map(int, arr.split()))

result = min_diff_sum(arr)
print("Минимальная разница между суммами двух подмассивов:", result)
Лев Михайлов Гуру (3239) 1 неделю назад
 from ast import literal_eval 

def min_diff_sub_array(arr):
min_diff, total_sum, prefix_sum = float('inf'), sum(arr), 0
for i in arr:
prefix_sum += i
diff = abs((total_sum - prefix_sum) - prefix_sum)
if (diff < min_diff):
min_diff = diff
return min_diff

print(min_diff_sub_array(literal_eval(input())))
Похожие вопросы