# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1237978 | Jer | Bank (IZhO14_bank) | C++20 | 1098 ms | 49852 KiB |
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 25;
const int MAXM = 25;
int n, m;
int a[MAXN], b[MAXM];
vector<int> sum_subsets[1005];
set<long long> memo;
void generate_subsets()
{
int total = 1 << m;
for (int mask = 1; mask < total; mask++)
{
int sum = 0;
for (int i = 0; i < m; i++)
if ((mask >> i) & 1)
sum += b[i];
if (sum <= 1000)
sum_subsets[sum].push_back(mask);
}
}
long long state_key(int curr, int used_mask)
{
return ((long long)curr << 20) | used_mask;
}
bool dfs(int curr, int used_mask)
{
if (curr == n)
return true;
long long key = state_key(curr, used_mask);
if (memo.count(key))
return false;
int target = a[curr];
for (int mask : sum_subsets[target])
if ((mask & used_mask) == 0)
if (dfs(curr + 1, used_mask | mask))
return true;
memo.insert(key);
return false;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
for (int i = 0; i < m; i++)
scanf("%d", &b[i]);
sort(a, a + n, greater<int>());
generate_subsets();
printf("%s\n", dfs(0, 0) ? "YES" : "NO");
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |