제출 #547988

#제출 시각아이디문제언어결과실행 시간메모리
547988mgl_diamond은행 (IZhO14_bank)C++14
71 / 100
171 ms14648 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define ii pair<int, int> template<class T> bool umax(T &a, T b) { return (a<b?a=b, 1:0); } template<class T> bool umin(T &a, T b) { return (a>b?a=b, 1:0); } vector<int> bit[1001]; int n, m, a[20], b[20], dp[2][1<<20]; 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) { int sum=0; for(int j=0; j<m; ++j) if (i>>j&1) sum+=b[j]; if (sum<=1000) bit[sum].push_back(i); } bool cur=1, nxt=0; dp[0][0]=1; for(int k=0; k<n; ++k) { cur^=1; nxt^=1; memset(dp[nxt], 0, sizeof(dp[nxt])); // cout << cur << "\n" << nxt << "\n"; for(int i=0; i<(1<<m); ++i) if (dp[cur][i]>0) for(int j: bit[a[k]]) if ((i&j)==0) { // cout << j << "\n"; dp[nxt][i+j]+=dp[cur][i]; } } for(int i=0; i<(1<<m); ++i) if (dp[nxt][i]>0) { cout << "YES\n"; return 0; } cout << "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...