728x90
반응형
https://www.acmicpc.net/problem/1182
부분 수열 이문제는
1개부터 N개까지 모든 경우를 뽑아내서 더해서 합이 S와 같은 갯수가 몇개 인지 세면되는데
비트로 생각하면 이렇게 뽑히면 되는겁니다.
이렇게 해서 1인부분의 합이 S가 되는 것을 세면 되는 문제로 엄청 쉬워집니다.
무튼 오늘은 아래 소스가 로또 문제랑 비슷하니 로또 문제도 풀어보시고 이문제도 풀어보시면 좋을것 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include<stdio.h>
using namespace std;
int N, S;
int input[21];
int num[21];
int cnt = 0;
void dfs(int s,int idx) {
if (idx > N)return;
if (idx>=1&&idx <= N) {
int ret = 0;
for (int y = 0, ten = 1; y < N; y++,ten*=10) {
if (num[y] == 1)ret += input[y];
}
if (ret == S)cnt++;
}
for (int i = s; i < N; i++) {
if (num[i] == 0) {
num[i] = 1;
dfs(i+1,idx + 1);
num[i] = 0;
}
}
}
int main(void) {
scanf("%d %d", &N, &S);
for (int i = 0; i < N; i++) {
scanf("%d", &input[i]);
}
dfs(0,0);
printf("%d", cnt);
return 0;
}
|
오늘은 여기까지이고 감사합니다.
728x90
반응형
'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글
백준 1244 스위치 켜고 끄기 (0) | 2019.07.28 |
---|---|
백준 1941 소문난 칠공주 (0) | 2019.07.28 |
백준 11723 집합 (0) | 2019.07.24 |
백준 6603 로또 (0) | 2019.07.24 |
백준 1339 단어 수학 (0) | 2019.07.23 |
댓글