def DFS(L, sum, tsum):
global result
if sum+(total-tsum)<result:
return
if sum>c:
return
if L==n:
if sum>result:
result=sum
else:
DFS(L+1, sum+a[L], tsum+a[L])
DFS(L+1, sum, tsum+a[L])
if __name__=="__main__":
c, n=map(int, input().split())
a=[int(input()) for _ in range(n)]
result=-2147000000
total=sum(a)
DFS(0, 0, 0)
print(result)
- 종료 조건을 더 늘려서 속도를 개선했다.
- 해당 res에 들어간 값보다 아래 가지를 더해도 값이 더 가까워지지 않을 땐 res를 사용하도록 하는 것이다.
'자료구조와 알고리즘 > 개인적인 코딩테스트 관련 풀이' 카테고리의 다른 글
[완전탐색][트리] - 순열 구하기(DFS) (0) | 2022.07.25 |
---|---|
[완전탐색][트리] - 중복 수열 구하기(DFS) (0) | 2022.07.25 |
[완전탐색][상태 트리] - 합이 같은 부분집합(DFS) (0) | 2022.07.22 |
[완전탐색][상태 트리] - 부분집합 구하기(DFS) (0) | 2022.07.22 |
[완전탐색][재귀 함수와 스택] - 트리 이진순회 (0) | 2022.07.21 |