# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1001374 | vjudge1 | Bank (IZhO14_bank) | C++17 | 31 ms | 348 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
int a[25], b[25], sum[1 << 20];
bool dp[1 << 20];
inline bool getbit(int num, int bit)
{
return (num >> bit)&1;
}
inline int flipbit(int num, int bit)
{
return num ^ (1 << bit);
}
int main()
{
freopen("bank.in", "r", stdin);
freopen("bank.out", "w", stdout);
int n, m;
cin>>n>>m;
for(int i = 0; i < n; i++) cin>>a[i];
for(int i = 0; i < m; i++) cin>>b[i];
for(int i = 1; i < n; i++) a[i] += a[i-1];
for(int i = 0; i < (1 << m); i++){
for(int j = 0; j < m; j++) if(getbit(i, j) == 1) sum[i] += b[j];
}
dp[0] = 1;
for(int i = 0; i < (1 << m); i++) if(dp[i] == 1){
int re = *upper_bound(a+0, a+n, sum[i]) - sum[i];
for(int j = 0; j < m; j++) if(getbit(i, j) == 0 && b[j] <= re) dp[flipbit(i, j)] = 1;
}
bool ok = 0;
for(int i = 0; i < (1 << m); i++) if(dp[i] == 1 && sum[i] == a[n-1]){ok = 1; break;}
if(ok == 1) cout<<"YES";
else cout<<"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... |