https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
단순 브루트포스 문제.
1번 원소를 더한 후 2~n번 원소를 더하는 함수를 호출하고
그 함수에서는 3~n번 원소를 더하는 함수를 호출한다.
이 과정을 1~n번 원소 모두 실행하면 답이 나온다
누적 합을 이용하여 중간에 프루닝 하는 방법을 이용하려 했으나
n이 충분히 작아 시간초과가 나지 않을 것 같아 모든 원소를 탐색하였다.
def Back(sum, index):
global answer
sum += arr[index]
if sum == m:
answer += 1
if index == n-1:
return
for i in range(index+1, n):
Back(sum, i)
n, m = map(int,input().split())
arr = sorted(list(map(int,input().split())))
answer = 0
for i in range(n):
Back(0, i)
print(answer)
'백준(BOJ)' 카테고리의 다른 글
[Python/파이썬] - 백준(BOJ) 1826번 : 연료 채우기 (0) | 2022.05.07 |
---|---|
[Python/파이썬] - 백준(BOJ) 3109번 : 빵집 (0) | 2022.05.07 |
[Python/파이썬] - 백준(BOJ) 16472번 : 고냥이 (0) | 2022.05.07 |
[Python/파이썬] - 백준(BOJ) 23254번 : 나는 기말고사형 인간이야 (0) | 2022.05.07 |
[Python/파이썬] - 백준(BOJ) 3665번 : 최종 순위 (0) | 2022.05.07 |