Submission #1304346

#TimeUsernameProblemLanguageResultExecution timeMemory
1304346Euclid73은행 (IZhO14_bank)C++20
19 / 100
62 ms9648 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const ll MAXN=20; const ll MAXM=20; ll n, m, a[MAXN], b[MAXM], s[1<<MAXM]; bool dp[2][1<<MAXM], ans; int main() { 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=0; i<(1<<m); i++) { for (int j=0; j<m; j++) { if (i & (1<<j)) { s[i]+=b[j]; } } } dp[0][0]=1; for (int i=0; i<n; i++) { for (int j=0; j<(1<<m); j++) { dp[(i+1)%2][j]=0; } for (int cur = 0; cur < (1 << m); cur++) { if (dp[i][cur]==0) { continue; } ll mask=(1<<m)-1-cur; for (int submask = mask; submask != 0; submask = (submask - 1) & mask) { int subset = mask ^ submask; if (s[subset]==a[i]) { dp[(i+1)%2][cur+subset]=1; } } } } for (int i=0; i<(1<<m); i++) { ans|=dp[n%2][i]; } cout << (ans ? "YES":"NO") << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...