https://www.acmicpc.net/problem/5557
코드
import sys
'''
20까지의 숫자를 저장할 수 있는 2차원 dp 테이블을 생각해야 한다.
처음 숫자(인덱스0 해당)는 기본값으로 설정하고 시작한다.
ex)
number 8 -> dp[0] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
number 5 -> dp[1] = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-> 8과 3을 이용하여 5와 11 둘 다 1가지 방법으로 만들 수 있음
'''
result = []
n = int(sys.stdin.readline().rstrip())
num = list(map(int, sys.stdin.readline().rstrip().split()))
dp = [[0] * 21 for _ in range(n)]
dp[0][num[0]] = 1
for i in range(1, n - 1):
for cur_num in range(21):
if dp[i - 1][cur_num] != 0:
if 0 <= cur_num + num[i] <= 20:
dp[i][cur_num + num[i]] += dp[i - 1][cur_num]
if 0 <= cur_num - num[i] <= 20:
dp[i][cur_num - num[i]] += dp[i - 1][cur_num]
print(dp[-2][num[-1]])