三个数组,各能不能分成两半

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

"划分问题":能不能把一个数组分成两堆,两堆的和相等?三个数组 [17, 24, 15, 13, 23][10, 20, 15, 5][17, 24, 15, 13, 23, 3] 各判一次。注意 can_split 一行新算法都没写,只是把输入交给了 subset_sum

NO = [17, 24, 15, 13, 23]
YES = [10, 20, 15, 5]
ODD = [17, 24, 15, 13, 23, 3]

def subset_sum(arr, target):
    """老朋友:能不能挑出一个子集,和正好等于 target"""
    reach = {0}
    for x in arr:
        reach |= {r + x for r in reach}
    return target in reach

def can_split(arr):
    s = sum(arr)
    if s % 2 == 1:
        return False
    return subset_sum(arr, s // 2)

print("/".join("能" if can_split(x) else "不能" for x in (NO, YES, ODD)))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论