def equal_partition(nums):
    total = sum(nums)
    if total % 2:
        return False
    target = total // 2
    reachable = [False] * (target + 1)
    reachable[0] = True
    for value in nums:
        for amount in range(target, value - 1, -1):
            reachable[amount] = reachable[amount] or reachable[amount - value]
    return reachable[target]
