반응형
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
// 경로까지 출력하는 코드
int a[11], n, m, cnt = 0, path[10];
void DFS(int L, int sum) {
if (L == n + 1) {
if (sum == m) {
cnt++;
for (int i = 1; i < L; i++) {
printf("%d ", path[i]);
}
puts("");
}
}
else {
path[L] = a[L];
DFS(L + 1, sum + a[L]);
path[L] = 0;
DFS(L + 1, sum);
path[L] = -a[L];
DFS(L + 1, sum - a[L]);
}
}
int main() {
//freopen("input.txt", "rt", stdin);
int i;
scanf("%d %d", &n, &m);
for (i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
DFS(1, 0);
if (cnt == 0) printf("-1\n");
else printf("%d\n", cnt);
return 0;
}
이 DFS 문제에서는 분기가 세가지로 나누어집니다.
- 더할 때
- 뺄 때
- 연산에 포함시키지 않을 때
이를 생각하면서 탈출 조건을 걸어주고, PATH 배열을 통해서 연산의 경로까지 출력시켜 보았습니다.
반응형
'알고리즘' 카테고리의 다른 글
[세그먼트 트리] 구간합 구하기 / 원소 변경에서 시간복잡도를 줄이자! (0) | 2022.07.29 |
---|