Submission #346723

#TimeUsernameProblemLanguageResultExecution timeMemory
346723knightron0은행 (IZhO14_bank)C++14
100 / 100
714 ms175852 KiB
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fr first #define sc second #define clr(a) memset(a, 0, sizeof(a)) #define sz(x) x.size() #define printvector(arr) for (auto it = arr.begin(); it != arr.end(); ++it) cout<<*it<<" "; cout<<endl; #define REP(i, n) for (int i = 0; i < n; i++) #define FOR(i, x, y) for (int i = x; i < y; i++) #define DEC(i, x, y) for (int i = x; i >= y; i--) #define all(v) v.begin(), v.end() #define min3(a, b, c) min(a, min(b, c)) #define max3(a, b, c) max(a, max(b, c)) #define alla(a, n) a, a + n #define gcd(a, b) __gcd(a, b) #define lcm(a, b) (a * b)/gcd(a, b) #define int long long int #define ull unsigned long long #define printarray(arr, n) for(int i= 0;i<n;i++) cout<<arr[i]<<' '; cout<<endl; #define printvecpairs(vec) for(auto it: vec) cout<<it.fr<<' '<<it.sc<<endl; #define initdp(a) memset(a, -1, sizeof(a)); #define endl '\n' #define float long double using namespace std; const int MOD = 1e9 + 7; const int INF = 2e15; const int MAXN = 20; int fastexpo(int b, int exp){ if(exp == 0) return 1; if(exp == 1) return b; int ans = (fastexpo(b,exp/2) % MOD); ans *= ans; ans %= MOD; if(exp % 2 == 1){ ans *= b; } ans %= MOD; return ans; } int a[MAXN], b[MAXN]; int n, m; vector<int> poss[1006]; int dp[MAXN][(1LL<<MAXN)]; bool solve(int idx, int mask){ if(idx == n) return 1; if(dp[idx][mask] != -1){ if(dp[idx][mask] == 0) return 0; else return 1; } bool ans = 0; for(auto mask2: poss[a[idx]]){ if((mask2&mask) == 0){ ans |= solve(idx+1, mask2|mask); } } if(ans) dp[idx][mask] = 1; else dp[idx][mask] = 0; return ans; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); initdp(dp); cin>>n>>m; int mx = 0; for(int i= 0;i<n;i++){ cin>>a[i]; mx = max(mx, a[i]); } for(int i = 0;i<m;i++){ cin>>b[i]; } for(int mask = 0;mask<(1LL<<m);mask++){ int sum =0; for(int i = 0;i<m;i++){ if((1LL<<i) & mask){ sum += b[i]; } } if(sum <= mx) poss[sum].pb(mask); } if(solve(0, 0)){ cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...