Recent Posts
Notice
No Rules Rules
냅색문제 (feat. 백준, 1450번) 본문
728x90
반응형
냅색문제
https://www.acmicpc.net/problem/1450
1450번: 냅색문제
첫째 줄에 N과 C가 주어진다. N은 30보다 작거나 같은 자연수, C는 109보다 작거나 같은 음이 아닌 정수이다. 둘째 줄에 물건의 무게가 주어진다. 무게도 109보다 작거나 같은 자연수이다.
www.acmicpc.net
반응형
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long arr[30];
vector<long long> arr1, arr2;
void comb(register int l, register int r, vector<long long>& tmp, register int long long sum) {
if (l > r) {
tmp.push_back(sum);
return;
}
comb(l + 1, r, tmp, sum);
comb(l + 1, r, tmp, sum + arr[l]);
}
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
register int N, C;
cin >> N >> C;
for (register int i = 0; i < N; i++)
cin >> arr[i];
comb(0, N / 2, arr1, 0), comb(N / 2 + 1, N - 1, arr2, 0);
sort(arr2.begin(), arr2.end());
register long long ans = 0;
for (register int i = 0; i < arr1.size(); i++)
ans += upper_bound(arr2.begin(), arr2.end(), C - arr1[i]) - arr2.begin();
cout << ans;
return 0;
}
// *&)*@*
처음 본 'meet in the middle' 알고리즘을 사용하여 풀이하는 문제라고 합니다.
해당 알고리즘에 대한 설명은 아래 링크로 대체합니다.
[알고리즘 기법] Meet In The Middle
Meet In The Middle 기법(백준 1208)
velog.io
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
가장 긴 증가하는 부분 수열 5 (feat. 백준, 14003번) (0) | 2022.08.25 |
---|---|
1로 만들기 2 (feat. 백준, 12852번) (0) | 2022.08.25 |
소수의 연속합 (feat. 백준, 1644번) (0) | 2022.08.24 |
부분합 (feat. 백준, 1806번) (0) | 2022.08.24 |
두 용액 (feat. 백준, 2470번) (0) | 2022.08.23 |
Comments