问题描述
小青蛙爱唱歌,呱呱呱,呱呱呱,唱的荷花快快长,唱的西瓜快快长。
荷花开了当舞台,西瓜长大做房子!
但是,小青蛙觉得每天都在池塘边唱歌好无聊,就想像妈妈一样出去工作。
有一天,小青蛙独自出门学习邻居青蛙叔叔们捉害虫,但是由于缺少锻炼,一天下来累坏咱们小青蛙了。
小青蛙还是想快快长大,这样就能帮助妈妈分担辛苦了。
于是,他找到青蛙叔叔,想让他们帮助自己锻炼体力,青蛙叔叔告诉了小青蛙一个锻炼体力的小窍门:来回跳跃!
跳跃锻炼规则如下:
每轮可以跳跃 NN 次,每次跳跃 lili 距离,可以向前跳,也可以向后跳,这样每天多锻炼几轮,就能增强体力啦!
为了增强锻炼的趣味性,青蛙叔叔给小青蛙设定了这 NN 次跳跃的距离 (l1,l2,...,lN)(l1,l2,...,lN),想让小青蛙跳跃 NN 次后回到原地。
青蛙叔叔要求小青蛙这 NN 次跳跃都必须按照给定的顺序完成,不能少跳一次!
但是憨憨的小青蛙不知道自己能否完成跳回原地的锻炼任务,于是他找到聪明的你来帮助他:
如果小青蛙可以经过这 NN 次跳跃回到原地,输出 YES;反之,输出 NO。
输入格式
输入第 11 行包含一个正整数 NN,表示跳跃的次数。
输入第 22 行包含 NN 个正整数 lili,表示小青蛙每次跳跃的距离。
输出格式
输出仅一行,如果能跳跃回到原地,输出 YES;反之,输出 NO。
样例输入1
3
1 2 3
样例输出1
YES
'''
问题等价
从数组arr 中选出若干个 和 是否 为 sum(arr)//2
显然 若sum(arr)为奇数 则为不可以
从数组中选出若干个可以用二进制表示
选用1 不用0
时间复杂度 o(2^n) n<=20
'''
def s():
n = int(input())
arr = list(map(int,input().split()))
h = sum(arr)
if h%2==1:
print('NO')
return
for i in range(1,2**n):
cnt = 0
for k in range(n):
if i>>k&1:
cnt+=arr[k]
if cnt==h//2:
print('YES')
return
print('NO')
s()
标签:输出,故事,NN,青蛙,锻炼,UUST,跳跃,YES From: https://blog.csdn.net/weixin_72050316/article/details/141858686