# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1275140 | almaz | 은행 (IZhO14_bank) | C++17 | 326 ms | 20664 KiB |
#include <iostream>
#include <vector>
#include <set>
#include <unordered_map>
using namespace std;
#define endl '\n'
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n , m;
scanf( "%d%d" ,&n , &m);
vector <int> a(n) , b(m);
for(int i = 0;i < n;i++){
scanf("%d" ,&a[i]);
}
for(int i = 0;i < m;i++){
scanf("%d" ,&b[i]);
}
vector <vector <int>> mp(200001);
for(int i = 0;i < (1 << m);i++){
int sum = 0;
for(int j = 0;j < m;j++){
if(1 & (i >> j)){
sum += b[j];
}
}
if(sum <= 200000) mp[sum].push_back(i);
}
vector <int> dp(1 << m);
dp[0] = 1;
for(int i = 0;i < n;i++){
vector <int> cnt(1 << m);
for(int j = 0;j < (1 << m);j++){
if(!dp[j]) continue;
for(int k : mp[a[i]]){
if((k & j) == 0){
cnt[k | j] = 1;;
}
}
}
swap(cnt , dp);
}
int f = 0;
for(int i : dp){
if(i){
f = 1;
}
}
if(f){
printf("YES");
}
else{
printf("NO");
}
}
Compilation message (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... |