dfs로 중복하지 않는 부분수열 구함
#include<iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <deque>
using namespace std;
const int MAX = 20;
int N, S;
vector<int> v;
int re = 0;
int arr[MAX] = {0, };
void dfs(int num, int k, int m){
if(k==m) { // M까지 들어갔을 시 실행
int sum = 0;
for(auto i =0;i<m;i++){
sum += arr[i];
}
if(sum==S)re++;
} else { // M까지 안 들어갔을 시
for(auto i=num; i<N;i++) {
arr[k]=v[i]; // 값 저장
dfs(i+1,k+1, m); // 더 깊게
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>N>>S;
for(int i=0;i<N;i++){
int a;
cin>>a;
v.push_back(a);
}
for(int i=1;i<=N;i++){
dfs(0,0,i);
}
cout<<re;
return 0;
}
'algorithm > 문제 풀이' 카테고리의 다른 글
99클럽 코테 스터디 19일차 TIL - 프로그래머스 공원 산책 (0) | 2024.04.19 |
---|---|
99클럽 코테 스터디 18일차 TIL - 백준 16953번 (A -> B) (0) | 2024.04.18 |
99클럽 코테 스터디 17일차 TIL - 프로그래머스 전력망을 둘로 나누기 (0) | 2024.04.17 |
99클럽 코테 스터디 16일차 TIL - 프로그래머스 신고 결과 받기 (0) | 2024.04.16 |
99클럽 코테 스터디 14일차 TIL - 프로그래머스 JadenCase 문자열 만들기 (0) | 2024.04.14 |