문제 : https://www.acmicpc.net/problem/1182
[알고리즘풀이]
백트레킹을 이용해 만들 수 있는 모든 부분수열의 합을 구해본다.
#include<iostream>
#include<vector>
using namespace std;
int n_l[20], answer,n,m;
void bt(int i, int j, vector<int> v) {
if (v.size() == i) {
int temp = 0;
for (int k = 0; k < i; k++){
temp += v[k];
}
if (temp == m) {
answer++;
}
return;
}
for (int k = j + 1; k < n; k++){
v.push_back(n_l[k]);
bt(i, k, v);
v.pop_back();
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> n_l[i];
for (int i = 1; i <= n; i++) {
// i개 씩 뽑을거다.
for (int j = 0; j < n + 1 - i; j++) {
// j까지담김
vector<int> v;
v.push_back(n_l[j]);
bt(i, j, v);
v.pop_back();
}
}
cout << answer;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 2580 - 스도쿠 (0) | 2019.09.21 |
---|---|
[BOJ] 2981 - GRANICA (0) | 2019.09.21 |
[BOJ] 1788 - 피보나치 수의 확장 (0) | 2019.09.20 |
[BOJ] 17298 - 오큰수 (0) | 2019.09.20 |
[BOJ] 1874 - 스택 수열 (0) | 2019.09.20 |