제출 #1098117

#제출 시각아이디문제언어결과실행 시간메모리
1098117vjudge1은행 (IZhO14_bank)Cpython 3
52 / 100
1045 ms19292 KiB
n, m = [int(x) for x in input().split()]
    
valores = [int(x) for x in input().split()]
notas = [int(x) for x in input().split()]
 
residual = [-1] * (1 << m)
cobertos = [-1] * (1 << m)
 
residual[0] = 0
cobertos[0] = 0
 
possivel = 1
 
for s in range(1 << m):
    for p in range(m):
        if (s & (1 << p)) == 0:
            continue
 
        ant = s & ~(1 << p)
 
        if cobertos[ant] == -1:
            continue
 
        novo = residual[ant] + notas[p]
        
        if cobertos[ant] < n:
            alvo = valores[cobertos[ant]]
        else:
            continue
 
        if novo < alvo:
            cobertos[s] = cobertos[ant]
            residual[s] = novo
 
        elif novo == alvo:
            cobertos[s] = cobertos[ant] + 1
            residual[s] = 0
 
    if cobertos[s] == n:
        possivel = 0
 
if possivel == 0:
    print("YES")
else:
    print("NO")
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...