728x90
반응형
https://www.acmicpc.net/problem/1182
문제 해결 방법
k를 차례로 증가시키면서 k번째 원소를 합하거나 합하지 않는 두가지 경우로 백트래킹을 한다
#include <bits/stdc++.h>
using namespace std;
int n, s;
int arr[21];
int result = 0;
void backtrack(int k, int tot){
if(k == n){
if(tot == s) result++;
return;
}
backtrack(k+1, tot); // k번째 원소를 더하지 않는 경우
backtrack(k+1, tot+arr[k]); // k번째 원소를 더하는 경우
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> s;
for(int i=0; i<n; i++){
cin >> arr[i];
}
backtrack(0, 0);
if(s == 0) result--;
cout << result;
return 0;
}
참고
https://www.youtube.com/watch?v=Enz2csssTCs&t=3s
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/백트래킹/C++] 15650번 N과 M (2) (조합) (0) | 2023.01.08 |
---|---|
[백준] 백트래킹 연습문제 모음 (0) | 2023.01.07 |
[백준/백트래킹/C++] 9663번 N-Queen (0) | 2023.01.07 |
[백준/백트래킹/C++] 10819번 차이를 최대로 (0) | 2023.01.07 |
[백준/백트래킹/C++] 15649번 N과 M(1) (1) | 2023.01.07 |