python编程题 你是一名医院的护士,粗心的你拿到药片后并没有进行分组,只记得要平均成两份,然而当你想起这件事的时候,病人的药片已经被分成了好几瓶。瓶字中的药片无法取出。鲜有n个药瓶,第二行n个数字代表每个药瓶中药片的数量,现在你想知道,是否可以将药片通过将药瓶组合的方式平均成两份(不允许拆分每瓶药片) 输入描述:首先输入一个数字n,代表药瓶的数量,第二行输入n个数字,代表每个瓶子中药片的数量nums
时间: 2023-05-28 11:01:23 浏览: 80
输入样例:
5
3 1 2 4 3
输出样例:
True
# 解题思路:
# 首先判断总药片数量是否是偶数,如果不是则无法平均成两份
# 然后算出每份要达到的药片数量target,如果总药片数量小于target,也无法平均成两份
# 如果总药片数量大于等于target,在药瓶数量范围内枚举每个子集,判断该子集中的药物数量是否等于target即可。
# 时间复杂度是 O(2^n),可以通过测试数据,但实际上还可以更优化。
n = int(input())
nums = list(map(int, input().split()))
total = sum(nums)
if total % 2 == 1:
print(False)
else:
target = total // 2
if max(nums) > target:
print(False)
else:
# 枚举药瓶子集
def dfs(nums, i, cursum, target):
if cursum == target:
return True
if i == len(nums):
return False
if dfs(nums, i + 1, cursum + nums[i], target):
return True
return dfs(nums, i + 1, cursum, target)
if dfs(nums, 0, 0, target):
print(True)
else:
print(False)
阅读全文
相关推荐

















