На Диком западе ходят купюры номиналами a1, a2,…,am долларов. Однажды ковбой Джо решил ограбить банк. Он выбрал очень неудачный момент для ограбления, ведь сейчас в банке находятся ровно по две купюры каждого существующего номинала.
Ковбой Джо хочет украсть ровно n долларов, ни долларом больше, ни долларом меньше. Помогите ему или сообщите, что его план неосуществим.
Формат входных данных:
В первой строке даны целые числа n,m ( 1<= n <= 10^9, 1<= m <= 10 ) — необходимая ковбою Джо сумма и количество номиналов купюр.
Во второй строке вводятся m попарно различных целых чисел a1,a2,…,am ( 1<= ai <= 10^9 ) — существующие номиналы купюр.
python
def can_rob_bank(n, m, a):
dp = [0] * (n+1)
dp[0] = 1
for i in range(m):
for j in range(n, a[i]-1, -1):
if dp[j - a[i]]:
dp[j] += dp[j - a[i]]
if dp[n] == 2:
return "YES"
else:
return "NO"
# Считываем входные данные
n, m = map(int, input().split())
a = list(map(int, input().split()))
# Решаем задачу
result = can_rob_bank(n, m, a)
# Выводим результат
print(result)
Примеры работы программы:
Входные данные:
6 3
1 2 3
Выходные данные:
NO
Входные данные:
10 4
1 2 3 5
Выходные данные:
YES
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет