小青蛙的故事【UUST】

问题描述

小青蛙爱唱歌,呱呱呱,呱呱呱,唱的荷花快快长,唱的西瓜快快长。

荷花开了当舞台,西瓜长大做房子!

但是,小青蛙觉得每天都在池塘边唱歌好无聊,就想像妈妈一样出去工作。

有一天,小青蛙独自出门学习邻居青蛙叔叔们捉害虫,但是由于缺少锻炼,一天下来累坏咱们小青蛙了。

小青蛙还是想快快长大,这样就能帮助妈妈分担辛苦了。

于是,他找到青蛙叔叔,想让他们帮助自己锻炼体力,青蛙叔叔告诉了小青蛙一个锻炼体力的小窍门:来回跳跃!

跳跃锻炼规则如下:

每轮可以跳跃 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()

 

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vsropy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值