はじめに
このシリーズではレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】でまとめられている100問をPythonで解いています。
問題
ポイント
ビット全探索で全ての組み合わせパターンを確認し、与えられたmが作れるかを検証します。
コード
def main():
N = int(input())
A = [i for i in map(int, input().split(" "))]
Q = input()
M = [i for i in map(int, input().split(" "))]
sums = set()
# ビット全探索で全ての組み合わせパターンを確認する
for i in range(2**N):
tmp = 0
for j in range(N):
if (i >> j) & 1:
tmp += A[j]
sums.add(tmp)
# 与えられたmが作れるかを確認する
for i in M:
if i in sums:
print('yes')
else:
print('no')
if __name__ == '__main__':
main()