わかさぎのブログ

プログラミング、Atcoderの勉強とか

AtCoder Beginner Contest 274 D - Robot Arms 2

N,x,y=map(int,input().split())
A=list(map(int,input().split()))

M=10000

dp1=[False for i in range(-10000,10001)]
dp2=[False for i in range(-10000,10001)]
dp3=[0 for i in range(-10000,10001)]

dp1[A[0]]=True
dp2[0]=True


for i in range(1,N):
    for j in range(-M,M+1):dp3[j]=0
    a=A[i]
    if i%2==0:
        for j in range(-M,M-a+1):
            dp3[j+a] = dp3[j+a] or dp1[j]
            dp3[j] = dp3[j] or dp1[j+a]
        dp1,dp3=dp3,dp1
    else:
        for j in range(-M,M-a+1):
            dp3[j+a] = dp3[j+a] or dp2[j]
            dp3[j] = dp3[j] or dp2[j+a]    
        dp2,dp3=dp3,dp2

judge=dp1[x] and dp2[y]
print("Yes") if judge else print("No")