5260. [파이썬 S/W 문제해결 최적화] 3일차 - 부분 집합의 합
풀이
T = int(input())
answer = []
for tc in range(1, T + 1):
N, K = map(int, input().split())
numbers = list(range(1, N+1))
# dp[i][j] : 1 ~ i의 숫자의 집합 중 합이 j인 부분집합의 개수
dp = [[0 for _ in range((N*(N+1)//2)+1)] for _ in range(N+1)]
dp[0][0] = 1
for i in range(1, N+1):
dp[i][0] = 1
max_sum = i*(i+1)//2
for j in range(1, max_sum+1):
if j < i:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = dp[i-1][j] + dp[i-1][j-i]
result = dp[N][K]
answer.append(result)
for tc in range(1, T+1):
print(f'#{tc} {answer[tc-1]}')