티스토리 뷰
문제
문제는 간단하게. t개의 case가 주어졌을 때 각 case별로 p개의 정수로 된 list가 주어진다. 이 때 list의 부분집합 중 그 합이 n이 되는 경우가 존재하는가?
이 문제를 부분집합 합(subset sum)이라 부르는 경우도 있는데, 기본적으로 all possible subset을 보는 것이 optimal한 문제라고 한다. 이 때 모든 subset을 봐야하는데, 이것을 bit계산으로 매우 빠르게 할 수 있어서 그 방법을 소개한다.
#include<iostream>
using namespace std;
int main() {
int n,t,p, sum,possible;
int list[1000]; //n<=1000 in problem
cin >> t; //number of test case
while (t--) {
possible = false; //possibility of subset sum==n
cin >> n; //length of the bar we want to contain
cin >> p; //the number of bars we have
for (int l = 0; l < p; l++) cin >> list[l]; //input part
for (int i = 0; i < (1 << p); i++) { //the number of possible subset is 2^p
sum = 0;
//j-loop: loop that calculate sum of i'th subset
for (int j = 0; j < p; j++) { //bit 1 to j(correspond to element of input set)
if (i & (1 << j)) { //test whether jth bit on
sum += list[j]; //if jth bit on, then list[j] is in i'th subset
}
}
if (sum == n) { //this subset's sum == n
possible = true;
break; //now can terminate searching
}
}
cout << ((possible) ? "YES" : "NO") << endl;
}
return 0;
}
bit연산이 무지 빨라서 2100만번 정도의 연산이 0.1초 안에 가능하다. 2^n에 비례하는 sol을 가질 수 밖에 없는 subset문제에 대해서는 bitmask기법을 이용하는게 좋을 것 같다.
'기초 알고리즘 문제 풀이' 카테고리의 다른 글
31. Uva-927 Integer Sequences from Addition of Terms (0) | 2020.02.27 |
---|---|
30. Uva-750 Queens Chess Problem //Recursive Backtracking (0) | 2020.02.26 |
28. UVa-725 Division //완전탐색, bitmask기법 (0) | 2020.02.24 |
27. UVa-10954 Add all //Greedy (0) | 2020.02.24 |
26. Uva-1203 Argus //Priority Queue & 비교연산자의 특수화 (0) | 2020.02.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 매트랩 함수
- Neural Network
- 이산 신호
- gradient descent
- 이미지처리
- 인덱스 이미지
- 사진구조
- ML
- 머신러닝
- 이미지
- RGB이미지
- Andrew ng
- 신호 및 시스템
- NLP
- CS
- 영상처리
- 영상구조
- 자연어 처리
- Logistic Regression
- 순환 신경망
- CNN
- 딥러닝
- 신경망
- 컴퓨터과학
- 연속 신호
- 컴퓨터 과학
- 매트랩
- 머신 러닝
- 밑바닥부터 시작하는 딥러닝
- rnn
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함